在我的 WPF
mvvm(light) 项目中,我遇到这样的问题:将 ListView.SelectedItem
绑定(bind)到我的 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>
模型 View :
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
并将其绑定(bind)到相同的源。当我在一个 Listview
中更改 SelctedItem
时,它会显示在另一个 Listview
上,反之亦然。
我查看了很多类似的解决方案,但我不知道出了什么问题:(
最佳答案
首先,您还应该发布 ItemsSource(ItemsSource 属性)的绑定(bind)代码。
但主要问题是你没有在 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
}
}
关于c# - 绑定(bind) ListView.SelectedItem 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11775947/