簡體   English   中英

如何檢測我的ObservableCollection中的項是否已更改

[英]How to detect if an item in my ObservableCollection has changed

我有一個綁定到ObservableCollection<Product> 更新網格后,這會自動更新集合中的Product對象。

我現在要做的是在集合中的任何對象被更新時觸發某種甚至觸發 - 或者 - 某種類型的綁定到集合,如果任何產品已更新,它將返回true / false depedant。

總體目標是在我的主窗口上有一個保存按鈕,如果沒有對我的集合進行任何更改則禁用該按鈕,如果已進行了更改,則啟用該按鈕。

我已經閱讀了INotifyPropertyChange但我沒有看到我如何使用它來監控整個集合的變化。

另外,如果我在Product類上實現此接口,我不會看到我的UI如何監視集合中的每個產品 - 或者它可以嗎?

  • Product類中實現INotifyPropertyChanged ,並為每個屬性提供通知。
  • 在viewmodel中實現INotifyPropertyChanged
  • 將屬性IsDirty添加到ViewModel(通過INotifyPropertyChanged通知。
  • 在viewmodel中,訂閱CollectionChanged

     public YourViewModel() { ... YourCollection.CollectionChanged += YourCollection_CollectionChanged; ... } private void YourCollection_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs args) { if (args.OldItems != null) foreach(var oldItem in args.OldItems) oldItem.PropertyChanged -= YourItem_PropertyChanged; if (args.NewItems != null) foreach(var newItem in args.NewItems) newItem.PropertyChanged += YourItem_PropertyChanged; } private void Youritem_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs args) { IsDirty = true; } 
  • 現在您可以綁定到viewmodel的IsDirty屬性,例如,您可以將Button.IsEnabled屬性直接綁定到它。

只需使用ObservableCollection。 它有一個名為CollectionChanged的事件。 如果你注冊它,你可以做你想要的。 例:

ObservableCollection<string> strings = new ObservableCollection<string>();
strings.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler(changed);
strings.Add("Hello");
strings[0] = "HelloHello";

和:

private void changed(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs args)
{
    //You get notified here two times.
}

邏輯需要進入您的Model(Product class)。 一種干凈的方法是在模型中公開IsDirty屬性(由字段支持)。

並且您的ViewModel將使用CanSave的Command綁定檢查內部集合,如果集合IsDirty=true任何項目,則返回IsDirty=true

我認為為集合中的每個對象訂閱PropertyChanged事件並觸發此事件,例如,在對象的setter中可以工作。

但是,我認為您不需要做所有這些來確定您的網格中是否更改了單元格。 我認為你可以做一些像他們在這里所做的事情:

http://social.msdn.microsoft.com/Forums/en/wpf/thread/81131225-90fb-40f9-a311-066952c7bc43

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM