2014-11-14 62 views
2

我有一個綁定到ItemsSource的列表的Datagrid,SelectedItem綁定了此列表的單個對象。我的ViewModel實現INotifyPropertyChanged。防止DataGrid更新MVVM中的選定項目

綁定工作正常,除非有一個變量(canSelectOtherObject = false)阻止myObject更改其值。即使認爲myObject不修改它的值,視圖上的數據網格也會選擇其他對象。我怎樣才能防止這一點?

查看:

<DataGrid ItemsSource="{Binding MyObjectList}" SelectedItem="{Binding MyObjectSelected, Mode=TwoWay}"> 

視圖模型:

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"); 
     } 
    } 
} 

謝謝!

+0

嘗試在if語句之外移動OnPropertyChanged,這應該會導致綁定刷新並重新選擇您期望的SelectedItem。然而,用戶可能看起來有點奇怪。 – ndonohoe 2014-11-14 16:09:19

+0

我嘗試過,但仍然沒有成功。 – Natan 2014-11-14 16:13:48

+0

嘗試將IsSynchronizedWithCurrentItem屬性設置爲true? http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.selector.issynchronizedwithcurrentitem(v=vs.110).aspx – ndonohoe 2014-11-14 16:23:05

回答

0

INotifyPropertyChanged用於通知UI在對象的屬性發生更改時更新綁定,我認爲您描述的是對象本身發生更改的情況。

鑑於你的綁定:

<DataGrid ItemsSource="{Binding MicrophoneList}" SelectedItem="{Binding MicrophoneSelected, Mode=TwoWay}">

它的更新所選擇的麥克風的性能(需要INotifyPropertyChanged)之一,並改變SelectedItem到不同的麥克風完全之間的差值(綁定更新是否通知或不)。