派生自 ReadOnlyObservableCollection 绑定
derive from ReadOnlyObservableCollection Binding
假设我有一个 ReadOnlyObservableCollection
类型的集合,我想注册到它的事件 CollectionChanged
这是受保护的...
我认为我可以用一种简单的方法克服它,所以我创建了我自己的 class 派生自 ReadOnlyObservableCollection
然后我订阅了事件并调用了我自己的个数:
public class MyCollection<T> : ReadOnlyObservableCollection<T>
{
public MyCollection(ObservableCollection<T> list) : base(list)
{
this.CollectionChanged += ThreadMessagesCollection_CollectionChanged;
this.PropertyChanged += ThreadMessagesCollection_PropertyChanged;
}
private void ThreadMessagesCollection_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
PropertyChanged(sender, e);
}
private void ThreadMessagesCollection_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
OnCollectionChanged(sender, e);
}
public delegate void CollectionChagedDelegate(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e);
protected event PropertyChangedEventHandler PropertyChanged;
public event NotifyCollectionChangedEventHandler OnCollectionChanged;
}
但是,现在绑定不起作用了。没有检测到异常...
知道我做错了什么,或者我该如何克服它?
你的event OnCollectionChanged
可能有问题,因为OnCollectionChanged
已经是ReadOnlyObservableCollection
的虚方法了。
我建议这样尝试:
public class MyCollection<T> : ReadOnlyObservableCollection<T>
{
public MyCollection([NotNull] ObservableCollection<T> list) : base(list) {}
protected override void OnCollectionChanged(NotifyCollectionChangedEventArgs args)
{
base.OnCollectionChanged(args);
OnMyCollectionChanged(args);
}
public event NotifyCollectionChangedEventHandler MyCollectionChanged;
protected virtual void OnMyCollectionChanged(NotifyCollectionChangedEventArgs e)
{
NotifyCollectionChangedEventHandler handler = MyCollectionChanged;
if (handler != null) handler(this, e);
}
}
您不需要定义自己的委托,因为已经声明了 NotifyCollectionChangedEventHandler
。
假设我有一个 ReadOnlyObservableCollection
类型的集合,我想注册到它的事件 CollectionChanged
这是受保护的...
我认为我可以用一种简单的方法克服它,所以我创建了我自己的 class 派生自 ReadOnlyObservableCollection
然后我订阅了事件并调用了我自己的个数:
public class MyCollection<T> : ReadOnlyObservableCollection<T>
{
public MyCollection(ObservableCollection<T> list) : base(list)
{
this.CollectionChanged += ThreadMessagesCollection_CollectionChanged;
this.PropertyChanged += ThreadMessagesCollection_PropertyChanged;
}
private void ThreadMessagesCollection_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
PropertyChanged(sender, e);
}
private void ThreadMessagesCollection_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
OnCollectionChanged(sender, e);
}
public delegate void CollectionChagedDelegate(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e);
protected event PropertyChangedEventHandler PropertyChanged;
public event NotifyCollectionChangedEventHandler OnCollectionChanged;
}
但是,现在绑定不起作用了。没有检测到异常...
知道我做错了什么,或者我该如何克服它?
你的event OnCollectionChanged
可能有问题,因为OnCollectionChanged
已经是ReadOnlyObservableCollection
的虚方法了。
我建议这样尝试:
public class MyCollection<T> : ReadOnlyObservableCollection<T>
{
public MyCollection([NotNull] ObservableCollection<T> list) : base(list) {}
protected override void OnCollectionChanged(NotifyCollectionChangedEventArgs args)
{
base.OnCollectionChanged(args);
OnMyCollectionChanged(args);
}
public event NotifyCollectionChangedEventHandler MyCollectionChanged;
protected virtual void OnMyCollectionChanged(NotifyCollectionChangedEventArgs e)
{
NotifyCollectionChangedEventHandler handler = MyCollectionChanged;
if (handler != null) handler(this, e);
}
}
您不需要定义自己的委托,因为已经声明了 NotifyCollectionChangedEventHandler
。