我有一个ObservableCollection,它在两个客户端类之间共享。 他们每个人都可以改变收藏。当它发生时,另一个类应该做一些 处理行动。 每个客户端类如何避免处理自己的操作?
答案 0 :(得分:0)
我在CollectionChanged
事件中看不到任何可以帮助您的内容。 sender
只是集合本身,而NotifyCollectionChangedEventArgs
也没有任何可用于此目的的信息。
我想你可以做的是在每个班级最初订阅CollectionChanged
事件,所以如果添加了某些内容,他们就会准备好听。但是当你尝试从一个类或另一个类添加一个项目时,让他们先取消订阅该事件,添加或删除该项目,然后重新订阅它。
public class SomeClass
{
ObservableCollection<int> myObservableColl = new ObservableCollection<int>();
public SomeClass()
{
myObservableColl.CollectionChanged += MainWindowViewModel_CollectionChanged;
}
private void AddItem(int number)
{
myObservableColl.CollectionChanged -= MainWindowViewModel_CollectionChanged;
myObservableColl.Add(number);
myObservableColl.CollectionChanged += MainWindowViewModel_CollectionChanged;
}
private void MoveItem(int oldIndex, int newIndex)
{
myObservableColl.CollectionChanged -= MainWindowViewModel_CollectionChanged;
myObservableColl.Move(oldIndex, newIndex);
myObservableColl.CollectionChanged += MainWindowViewModel_CollectionChanged;
}
// etc, etc.
}
如果你不想制作一大堆方法,你可以这样定义一个:
private void ChangeCollectionWithoutNotification(Action action)
{
myObservableColl.CollectionChanged -= MainWindowViewModel_CollectionChanged;
action.Invoke();
myObservableColl.CollectionChanged += MainWindowViewModel_CollectionChanged;
}
然后将动作传递给它:
ChangeCollectionWithoutNotification(() => myObservableColl.Add(5));
ChangeCollectionWithoutNotification(() => myObservableColl.Move(1, 2));