c# - 防止 DataGrid 更新 MVVM 中的选定项

标签 c# wpf mvvm binding datagrid

我有一个 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/

相关文章:

c# - 在 .net 中循环遍历 xml

WPF 与 WinForms 或丰富的 UI 与稳定的应用程序?您如何看待 Windows Forms 平台的 future ?

c# - 如何在 textBlock 上设置点击效果并打开一个新的 WPF 窗口?

c# - 是扩展绑定(bind)

wpf - 将代码后面的代码转移到 wpf 中的 View 模型

c# - 如何填充 GridView 异步

c# - 当您将 DTO 模式与某些缓存或 MVVM 结合使用时,DTO 模式不是才有用吗?

c# - 没有从 CustomObject 到 System.IConvertible 的隐式转换

C# 将 HTML 字符串中的相对链接转换为绝对链接

Silverlight RadComboBox 选择后保持打开状态