2 回答

TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超13個(gè)贊
我建議不要將ObservableCollection用作Items依賴(lài)項(xiàng)屬性的類(lèi)型。
在這里擁有ObservableCollection的原因(我想)是為了在CollectionChanged分配屬性值時(shí)使UserControl能夠附加處理程序。但是ObservableCollection太具體了。
WPF中的方法(例如在ItemsControl.ItemsSource中)是定義一個(gè)非常基本的接口類(lèi)型(如IEnumerable),并在為屬性分配值時(shí),找出值集合是否實(shí)現(xiàn)了某些更特定的接口。這里至少是INotifyCollectionChanged,但是該集合也可以實(shí)現(xiàn)ICollectionView和INotifyPropertyChanged。所有這些接口不是強(qiáng)制性的,這將使您的依賴(lài)項(xiàng)屬性可以綁定到各種類(lèi)型的集合,從普通數(shù)組開(kāi)始直到復(fù)雜的ItemCollection。
OnItemsChanged然后,您的屬性更改回調(diào)將如下所示:
private static void OnItemsChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)
{
MyGrid grid = obj as MyGrid;
if (grid != null)
{
var oldCollectionChanged = e.OldValue as INotifyCollectionChanged;
var newCollectionChanged = e.NewValue as INotifyCollectionChanged;
if (oldCollectionChanged != null)
{
oldCollectionChanged.CollectionChanged -= grid.OnItemsCollectionChanged;
}
if (newCollectionChanged != null)
{
newCollectionChanged.CollectionChanged += grid.OnItemsCollectionChanged;
// in addition to adding a CollectionChanged handler
// any already existing collection elements should be processed here
}
}
}
private void OnItemsCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
// handle collection changes here
}
添加回答
舉報(bào)