C# 阻止DataGrid更新MVVM中的选定项

C# 阻止DataGrid更新MVVM中的选定项,c#,wpf,mvvm,binding,datagrid,C#,Wpf,Mvvm,Binding,Datagrid,我有一个Datagrid,其中一个列表绑定到ItemsSource,SelectedItem绑定到此列表的单个对象。我的ViewModel实现INotifyPropertyChanged 绑定工作正常,除非有一个变量(canSelectOtherObject=false)阻止myObject更改其值。即使myObject不修改其值,视图上的datagrid也会选择其他对象。我怎样才能防止这种情况 视图: 视图模型: private ObservableCollection<MyObje

我有一个Datagrid,其中一个列表绑定到ItemsSource,SelectedItem绑定到此列表的单个对象。我的ViewModel实现INotifyPropertyChanged

绑定工作正常,除非有一个变量(canSelectOtherObject=false)阻止myObject更改其值。即使myObject不修改其值,视图上的datagrid也会选择其他对象。我怎样才能防止这种情况

视图:


视图模型:

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");
        }
    }
}
私有ObservableCollection MyObject列表;
选择私有MyObject MyObject;
私有布尔可以选择其他对象;
公共可观察收集对象列表
{
获取{返回myObjectList;}
设置{myObjectList=value;}
}
公共MyObject MyObjectSelected
{
获取{返回myObjectSelected;}
设置
{
如果(可以选择其他对象)
{
myObjectSelected=值;
OnPropertyChanged(“MyObject Selected”);
}
}
}

谢谢

INotifyPropertyChanged
用于在对象的属性更改时通知UI更新绑定,我认为您描述的是对象本身更改的情况

鉴于你的约束力:


这是更新所选麦克风的一个属性(需要
INotifyPropertyChanged
)与将
SelectedItem
更改为另一个麦克风(无论是否通知,绑定都会更新)之间的区别。

尝试将OnPropertyChanged移到if语句之外,这将导致绑定刷新并重新选择所需的SelectedItem。但是,用户可能会觉得有点奇怪。我尝试过,但仍然没有成功。是否尝试将IsSynchronizedWithCurrentItem属性设置为true?
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");
        }
    }
}