2 回答

TA貢獻1842條經驗 獲得超13個贊
我建議不要將ObservableCollection用作Items依賴項屬性的類型。
在這里擁有ObservableCollection的原因(我想)是為了在CollectionChanged分配屬性值時使UserControl能夠附加處理程序。但是ObservableCollection太具體了。
WPF中的方法(例如在ItemsControl.ItemsSource中)是定義一個非?;镜慕涌陬愋停ㄈ鏘Enumerable),并在為屬性分配值時,找出值集合是否實現了某些更特定的接口。這里至少是INotifyCollectionChanged,但是該集合也可以實現ICollectionView和INotifyPropertyChanged。所有這些接口不是強制性的,這將使您的依賴項屬性可以綁定到各種類型的集合,從普通數組開始直到復雜的ItemCollection。
OnItemsChanged然后,您的屬性更改回調將如下所示:
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
}
添加回答
舉報