您可以使用繼承來創建沿着這些線路自定義集合...
public class MyCollection<T> : ObservableCollection<T>, INotifyPropertyChanged
{
// implementation goes here...
//
private int _myCount;
public int MyCount
{
[DebuggerStepThrough]
get { return _myCount; }
[DebuggerStepThrough]
set
{
if (value != _myCount)
{
_myCount = value;
OnPropertyChanged("MyCount");
}
}
}
#region INotifyPropertyChanged Implementation
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string name)
{
var handler = System.Threading.Interlocked.CompareExchange(ref PropertyChanged, null, null);
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
#endregion
}
這是一個包裝了觀察到的集合,並提出一個自定義屬性中有一個類。該物業參與變更通知,但這取決於您的設計。
要連接起來,就可以做這樣的事情......
public MyCollection<string> Collection1 { get; set; }
public MyCollection<string> Collection2 { get; set; }
public void Initialise()
{
Collection1 = new MyCollection<string> { MyCount = 0 };
Collection2 = new MyCollection<string> { MyCount = 0 };
Collection2.CollectionChanged += (s, a) =>
{
// do something here
};
}
你也可以這樣做......
Collection1.PropertyChanged += // your delegate goes here
GREAT!感謝您的簡潔解決方案。夠簡單! – Rachael
嗨@GarryVass,我只是剛剛實現這個新的包裝ObservableCollection,但我不認爲它* *完全*回答我的問題。這不是在MyCount屬性中追加集合中的每個項目,對嗎?相反,它將*一個* MyCount屬性添加到整個Collection1或Collection2中?因此,爲集合中的每個項目添加附加屬性的唯一方法是定義一個附加類來包裝項目的屬性,添加一個額外的「視圖狀態」屬性,然後將其包含在常規的ObservableCollection中? – Rachael
是的,如果您需要爲集合中的每個項目附加附加屬性。儘管如此,上面的框架應該會有所幫助,並且讓我知道您是否需要更新 –