2013-09-26 41 views
0

我不太確定如何提出這個問題 - 因此我也不知道如何搜索正確的答案。這是簡單的情況。
1.我有一個自定義控制(myControl)一個名爲myItemsSource一個屬性,它是IEnumerable類型 - 我需要這個,這樣當我用我的控制可以使用列表/觀察的集合/ IEnumerable的等 2.我屬性然後使用這個IEnumerable列表的邏輯包裝。包裝有幾個Ovservable列表/普通列表,然後綁定到myControl上的幾個ItemsControl元素的背景。訂閱INotifyCollection在自定義控件中通過IEnumerable更改事件

記住因此裸露,當我在一個應用程序中使用myControl,我只有一次作爲一個IEnumerable綁定列表。當我綁定Observable集合時,我想要相同的功能(即通知用戶界面 - 因此如何通知包裝器列表中的項目已更改?我無法訂閱包裝器中的事件,因爲我使用了IEnumerable 。這意味着,即使我在包裝中使用Observablecollections列表並將幾個控件綁定到這些列表....它們不會被更新,因爲我的包裝沒有被通知物品已經改變了?但是我知道甚至在我的物品包裝已被添加...我如何發送通知到我的包裝,以便它可以重新計算列表 - 更新其他列表將更新我的用戶界面?

替代問題...你怎麼看如果IEnumerable列表還通過1個方法實現INotifyCollectionChanged [方法(IEnumerable list);] - >這可能會讓我到正確的pla CE。

感謝汗下面我來到了以下解決方案(我在這裏鍵入它,因爲它是更簡單的參考答案這種方式)。請大聲點他,因爲他的快速反應對我非常有幫助!

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 ; 
    } 
} 
+1

檢查,如果一個對象實現的接口很簡單:'布爾IsNotifyCollectionChanged =(收集INotifyCollectionChanged)' – Khan

回答

1

您的解決方案,不能讓你的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); 
} 
+0

感謝。它開始了我的寫作方向。所以我在Wrapper類中做了以下操作(縮短的示例):(1)我在類中創建了一個INotifyCollectionChanged變量cinc。 (2)在我的方法看起來像... myObject(iEnumerable列表){如果(列表INotifyCollectionChanged){INC = list作爲INotifyCollectionChanged; INC.Collectionchanged + = CollectionchangedEvent; ....}這將collectionchange事件帶到我的包裝器,然後執行到我的整個類...感謝你! – DaClan

+0

ps。我不想在myItemsSource中實現ObservableCollection 的原因是因爲我將無法使用簡單的列表/ IEnumerables(這將永遠不會在將來改變)。因此,如果我然後想要使用我的控件,我必須首先將列表/ IENumerable更改爲Observable列表,然後才能使用它。現在這種方式,我有更多的靈活性。謝謝。 – DaClan

+0

@DaClan我很高興能幫到你! – Khan