我不太确定如何问这个问题——因此我也不知道如何寻找正确的答案。这是简单的场景。
1. 我有一个自定义控件 (myControl),其属性名为 myItemsSource,其类型为 IEnumerable - 我需要这个,以便在使用控件时可以使用列表/可观察集合/IEnumerable 等。 2. 然后使用我的属性此 IEnumerable 列表的逻辑的包装器。包装器有一些 Ovservable 列表/普通列表,然后在后台绑定到 myControl 上的几个 ItemsControl 元素。
因此请记住,当我在应用程序中使用 myControl 时,我只将一个列表绑定为 IEnumerable。当我绑定一个可观察集合时,我想要相同的功能(即通知用户界面 - 因此我如何通知我的包装器列表中的项目已更改?我无法订阅包装器中的事件,因为我使用了 IEnumerable .这意味着即使我在包装器中对列表使用 Observablecollections 并将多个控件绑定到这些列表....它们也不会被更新,因为我的包装器没有被通知项目已更改?但是我知道这些项目即使在我的包装器已添加...如何将通知发送到包装器,以便它可以重新计算列表 - 更新其他几个将更新我的用户界面的列表?
替代问题...您如何查看 IEnumerable 列表是否也通过 1 方法实现 INotifyCollectionChanged [method(IEnumerable list); ] -> 这可能会让我到正确的地方。
感谢下面的 Khan,我得到了以下解决方案(我在这里输入它,因为以这种方式查看答案更简单)。请投票给他,因为他的快速反应对我帮助很大!!
public class Wrapper
{
INotifyCollectionChanged INC;
public Wrapper(IEnumerable list)
{
if (list is INotifyCollectionChanged)
{
INC = list as INotifyCollectionChanged;
INC.CollectionChanged += INC_CollectionChanged;
}
}
void INC_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
// Some Code ;
}
}