MVVM ObservableCollection绑定TwoWay

时间:2012-02-10 08:35:53

标签: mvvm observablecollection

我一直在使用MVVM,并想知道如何使用ObservableCollection 绑定到TwoWay中的ItemsSource?

例如,我有一个名为SmartDraw的自定义绘图UserControl,其中ItemsSource引用自定义图形列表,它被绑定到视图模型中的ObservableCollection图形。

如果我在视图模型中添加CustomGraphic,SmartDraw中的ItemsSource将知道添加了CustomGraphic,然后执行其他一些函数调用。这是正常的。

然而,SmartDraw也是一个Canvas,它允许用户使用鼠标在其上绘制图形。 CustomGraphic的数量将根据用户绘图而变化。那么,我怎么知道UI(SmartDraw)改变了ObservableCollection?

这是我的代码:

视图模型:

public ObservableCollection<CustomGraphic> Graphics { get; set; }

非常感谢你。

1 个答案:

答案 0 :(得分:0)

不确定这是否可以回答您的问题...但是,您可以通过以下方式跟踪对可观察集合的更改。

要检测对可观察集合的更改(而不是对集合中项目属性的更改),请订阅CollectionChanged的{​​{1}}事件。

ObservableCollection

如果您需要跟踪集合中对象的更改,则必须构建一个扩展的private ObservableCollection<ViewModel> _collection; public ObservableCollection<ViewModel> Collection { get { return _collection; } set { if (_collection != value) { // de-register on collection changed if (_collection != null) _collection.CollectionChanged -= this.Collection_CollectionChanged; _collection = value; // re-register on collection changed if (_collection != null) _collection.CollectionChanged += this.Collection_CollectionChanged; } } private void Collection_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) { switch (e.Action) { case NotifyCollectionChangedAction.Add: // e.NewItems contains the added items break; case NotifyCollectionChangedAction.Remove: // e.OldItems contains the removed items break; case NotifyCollectionChangedAction.Replace: // e.NewItems contains the new items, // e.OldItems contains the removed items break; case NotifyCollectionChangedAction.Reset: // the collection has been cleared break; } } 订阅项目的ObservableCollection事件,然后在其中一个属性具有事件时引发事件改变。

PropertyChanged