[英]Subscribing to INotifyCollection Changed event through IEnumerable in Custom Control
我不確定如何問這個問題-因此我也不知道如何尋找正確的答案。 這是一個簡單的場景。
1.我有一個自定義控件(myControl),其屬性名為myItemsSource,類型為IEnumerable-我需要這樣做,以便在使用控件時可以使用列表/可觀察的集合/ IEnumerable等。2.然后使用我的屬性此IEnumerable List邏輯的包裝器。 包裝器具有一些Ovservable列表/普通列表,然后將它們在后台綁定到myControl上的幾個ItemsControl元素。
因此,請記住,當我在應用程序中使用myControl時,我僅將列表作為IEnumerable綁定一次。 當我綁定一個Observable Collection時,我希望具有相同的功能(即通知用戶界面-因此,如何通知包裝器列表中的項已更改?我無法在包裝器中訂閱事件,因為我使用了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 ;
}
}
對於您的解決方案,您不能將myItemsSource
為ObservableCollection<T>
並避免出現這種情況嗎?
您如何查看IEnumerable列表是否還實現了INotifyCollectionChanged
您可以使用is
關鍵字檢查實體是否實現了接口。
var myCollection = new ObservableCollection<string>();
var isINotifyCollectionChanged = (myCollection is IsNotifyCollectionChanged);
如果您要針對您的情況使用特定方法:
bool IsINotifyCollectionChanged<T>(IEnumerable<T> collection)
{
return (collection is INotifyCollectionChanged);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.