麻烦结合ListView.SelectedItem
在我WPF
MVVM(光)的项目,我有这样的问题:我ModelView
的ListView.SelectedItem
结合后,我试图把它从ModelView
。它似乎是确定改变,但没有happend在查看:麻烦结合ListView.SelectedItem
XAML:
<ListView SelectedItem="{Binding SelectedOne}"
ItemsSource="{Binding Items}">
</ListView>
<ListView ScrollViewer.CanContentScroll="False"
ItemsSource="{Binding Items}"
ItemTemplateSelector="{StaticResource myDataTemplateSelector}"
HorizontalContentAlignment="Stretch"
SelectedItem="{Binding SelectedOne, Mode=TwoWay}"
IsSynchronizedWithCurrentItem="True">
</ListView>
MODELVIEW:
ObservableCollection<ItemViewModel> _EAItems = new ObservableCollection<ItemViewModel>();
public ObservableObject _selectedOne;
public ObservableCollection<ItemViewModel> Items
{
get
{
return _EAItems;
}
set
{
_EAItems = value;
}
}
public ObservableObject SelectedOne
{
get { return _selectedOne; }
set
{
if(_selectedOne != value)
_selectedOne = value;
}
}
Select = new RelayCommand(() =>
{
if (qw == 15) { qw = 0; }else
SelectedOne = Items[qw];
qw++;
});
项目是ObservableCollection
。
我添加了另一个Listview
并将其绑定到相同的来源。当我在Listview
之一更改SelctedItem
时,它显示在另一个上,反之亦然。
我看了很多直通类似的解决方案,我想不出有什么错:(
我同意Clemens和blindmeis。唯一的事实是SelectedOne需要与为Collection设置的类相同。而对于MVVM-light库,该方法是RaisePropertyChanged而不是OnPropertyChanged(如果您的viewModel继承自ViewModelBase)。
如果源包含ItemViewModels应使用此代码:
private ItemViewModel _selectedOne;
public ItemViewModel SelectedOne
{
get { return _selectedOne; }
set
{
if(_selectedOne != value)
_selectedOne = value;
RaisePropertyChanged("SelectedOne");
}
}
之所以您的收藏不需要RaisePropertyChanged是ObsvervableCollection类已经包含它以某种方式。
问候,
凯文
第一,你也应该张贴代码为ItemsSource时,ItemsSource属性的绑定。
但主要的问题是你不要在你的二传手
public ObservableObject SelectedOne
{
get { return _selectedOne; }
set
{
if(_selectedOne != value)
_selectedOne = value;
OnPropertyChanged("SelectedOne ");//<-- otherwise the view dont know that the SelectedItem changed
}
}
调用的PropertyChanged为了使绑定工作,你将不得不从SelectedOne
制定者提出一个PropertyChanged事件。定义类财产将不得不执行INotifyPropertyChanged。
不管SelectedOne
属性(即使它本身就是一个ObservableObject)的类型的,你必须提出一个PropertyChanged
事件时的属性更改值。
我无法找到一个参考,但我相信有一个隐含的属性更改事件时的财产变化的来源是用户界面 - 这就是为什么与示例2 ListViews正在工作 – 2012-08-02 12:29:26
非常感谢大家,它的工作 – ISens 2012-08-02 12:59:54