在我的WPF
mvvm(light)项目中,我遇到了这样的问题:在ListView.SelectedItem
绑定到ModelView
之后,我正试图从ModelView
更改它。它似乎没问题,但在View:
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
并将其绑定到相同的来源。当我在SelctedItem
之一中更改Listview
时,它会显示在另一个上,反之亦然。
我看了很多类似的解决方案,我无法弄清楚出了什么问题:(
答案 0 :(得分:2)
首先,您还应该发布ItemsSource的绑定代码,即ItemsSource属性。
但主要问题是你没有在你的setter中调用PropertyChanged
public ObservableObject SelectedOne
{
get { return _selectedOne; }
set
{
if(_selectedOne != value)
_selectedOne = value;
OnPropertyChanged("SelectedOne ");//<-- otherwise the view dont know that the SelectedItem changed
}
}
答案 1 :(得分:2)
为了进行绑定工作,您必须从SelectedOne
setter中引发PropertyChanged事件。定义SelectedOne
属性的类必须实现INotifyPropertyChanged。
无论SelectedOne
属性的类型(即使它本身是一个ObservableObject),当值<时,您必须引发PropertyChanged
事件/ em>属性发生变化。
答案 2 :(得分:1)
我同意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类已经以某种方式包含它。
此致
凯文