我有一个 Datagrid,其中一个列表绑定(bind)到 ItemsSource,SelectedItem 绑定(bind)到这个列表的单个对象。我的 ViewModel 实现了 INotifyPropertyChanged。
绑定(bind)工作正常,除非有一个变量 (canSelectOtherObject = false) 阻止 myObject 更改它的值。即使认为 myObject 不修改它的值,View 上的数据网格也会选择其他对象。我怎样才能避免这种情况?
查看:
<DataGrid ItemsSource="{Binding MyObjectList}" SelectedItem="{Binding MyObjectSelected, Mode=TwoWay}">
View 模型:
private ObservableCollection<MyObject> myObjectList;
private MyObject myObjectSelected;
private bool canSelectOtherObject;
public ObservableCollection<MyObject> MyObjectList
{
get { return myObjectList; }
set { myObjectList = value; }
}
public MyObject MyObjectSelected
{
get { return myObjectSelected; }
set
{
if(canSelectOtherObject)
{
myObjectSelected = value;
OnPropertyChanged("MyObjectSelected");
}
}
}
谢谢!
最佳答案
INotifyPropertyChanged
用于在对象的属性发生变化时通知UI更新绑定(bind),我认为你描述的是对象本身发生变化的情况。
鉴于您的绑定(bind):
<DataGrid ItemsSource="{Binding MicrophoneList}" SelectedItem="{Binding MicrophoneSelected, Mode=TwoWay}">
这是更新所选麦克风的一个属性(需要 INotifyPropertyChanged
)和更改 SelectedItem
之间的区别。完全不同的麦克风(无论您通知与否,绑定(bind)更新)。
关于c# - 防止 DataGrid 更新 MVVM 中的选定项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26933678/