Я использую свойство зависимости типа ObservableCollection<>
в моем элементе управления. Я хочу автоматически изменять отображение содержимого в моем элементе управления при редактировании XAML
кода. Я пишу такой код:
public class RowInfoCollection : ObservableCollection<RowInfo>
{
}
//... here my control class
public static readonly DependencyProperty RowDataProperty =
DependencyProperty.Register("RowData", typeof(RowInfoCollection), typeof(VisiGrid),
new PropertyMetadata(new RowInfoCollection(), RowDataChangedCallback));
public RowInfoCollection RowData
{
get
{
return (RowInfoCollection)base.GetValue(RowDataProperty);
}
set
{
base.SetValue(RowDataProperty, value);
}
}
private static void RowDataChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
VisiGrid vg = d as VisiGrid;
vg.rowData = (RowInfoCollection)e.NewValue;
vg.rowData.CollectionChanged += vg.rowData_CollectionChanged;
// Some application specific logic skipped
}
void rowData_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
rowData = RowData;
switch (e.Action)
{
// Skipped
}
}
Во время выполнения все работает нормально. Но когда я изменяю значение свойства в конструкторе VS2010, возникают некоторые проблемы. Когда я полностью удаляю значение или вставляю его вместо пустого VS, конструктор успешно обновляет отображение моего элемента управления. Но когда я добавляю или удаляю элементы коллекции по одному, изменений нет. Когда я строю проект, дисплей обновляется (фактически, дизайнер перезагружается).
Когда я заглянул в отладчик, то увидел, что в режиме разработки он успешно вызывает мою функцию обратного вызова, когда коллекция полностью удалена или вставлена, но не вызывает событие CollectionChanges
, когда оно частично изменяется.
Как мне заставить дизайнера VS отслеживать изменения коллекции и запускать события?
Спасибо.