簡體   English   中英

在自定義控件中通過IEnumerable訂閱INotifyCollection Changed事件

[英]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 ;
    }
}

對於您的解決方案,您不能將myItemsSourceObservableCollection<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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM