2009-11-25 74 views
1

我有一個WPF工具包DataGrid綁定到ObservableCollectionCar在我的視圖模型。 Car有一個PropertyChanged事件,並且其兩個字符串屬性中的每一個的設置者都觸發該事件。我還將網格的SelectedItem屬性綁定到類型爲Car的視圖模型中的屬性,也稱爲SelectedItem無法獲得DataGrid更新

在與網格相同的窗口中,我有add,modifydelete的按鈕。 Addmodify用兩個文本框打開一個對話窗口,每個屬性有一個Car屬性。 Delete只是顯示一個確認對話框然後刪除。

對於adddelete,我添加或刪除ObservableCollection中的一個項目,並且網格按照預期進行更新。但是,對於modify它不。起初,我的Car沒有使用PropertyChanged,經過一番搜索,我發現它需要網格更新時,個別項目的屬性更改。但是現在我正在使用PropertyChanged,網格仍然不會更新。

我試過在我的視圖模型中更改SelectedItem的值,以及直接更改集合上的項目。

我在做什麼錯?

+0

你能提供一些代碼嗎? – viky 2009-11-25 04:45:35

回答

1

確保您正在實施INotifyPropertyChanged,而不僅僅是引發PropertyChanged事件。此外,在引發PropertyChanged時,您必須通過「this」作爲發件人,否則WPF將忽略該事件。

下面是一個實現INotifyPropertyChanged的簡單基類。

public class Person : INotifyPropertyChanged { 

    private string name; 

    public string Name { 
     get { return name; } 
     set { 
      if (name != value) { 
       name = value; 
       OnPropertyChanged("Name"); 
      } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    protected virtual void OnPropertyChanged(string propertyName) { 
     var handler = PropertyChanged; 
     if (handler != null) { 
      handler(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 

} 
+0

謝謝喬希 - 我正在提高事件,但沒有實現接口。杜哈:) – 2009-11-25 05:51:28

0

聽起來像ObservableCollection的經典問題。 ObservableCollection只會通知自己的增加,刪除等。它不會通知您存儲在其中的任何屬性的更改。這就是爲什麼您的添加/刪除操作按預期工作。

你應該做的是使用的CollectionView並綁定到:

ObservableCollection<MyObject> myCollection = new ObservableCollection<MyObject>();  
ICollectionView view = CollectionViewSource.GetDefaultView(myCollection); 

使用這種方法也有benifit是分組和排序中內置了看法。