Я создаю приложение, в котором список объектов должен быть перехвачен и перенесен перед отображением в группе элементов управления. С этой целью я создал DependencyProperty типа ObservableCollection (BackupEntry - это настраиваемый класс, определяющий информацию о базе данных). Я хочу, чтобы элемент управления был связан с ObservableCollection в MVVM. Эта коллекция может использоваться для первоначальной загрузки элемента управления. Затем, когда запись добавляется через интерфейс управления, она должна быть добавлена во внутренний ObservableCollection, который определяется как DependencyProperty и отображается в коллекции MVVM с момента их привязки. Вот код, который я использую:
protected ObservableCollection<BackupEntry> _BackupItems = new ObservableCollection<BackupEntry>();
public static readonly DependencyProperty BackupItemsProperty = DependencyProperty.Register("BackupItems", typeof(ObservableCollection<BackupEntry>), typeof(ExplorerWindow));
public ObservableCollection<BackupEntry> BackupItems
{
get { return (ObservableCollection<BackupEntry>)GetValue(BackupItemsProperty); }
set { SetValue(BackupItemsProperty, value); }
}
public ExplorerWindow()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(ExplorerWindow), new FrameworkPropertyMetadata(typeof(ExplorerWindow)));
SetValue(BackupItemsProperty, _BackupItems);
_BackupItems.CollectionChanged += new NotifyCollectionChangedEventHandler(BackupItems_CollectionChanged);
}
void BackupItems_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
throw new NotImplementedException();
}
И в тестовом приложении:
<my:ExplorerWindow Name="ew" HorizontalAlignment="Left" VerticalAlignment="Top" Width="503" Height="223" BackupItems="{Binding BackupListItems}" />
Я создал кнопку на экране в своем тестовом приложении. При нажатии на элемент BackupListItems добавляется элемент. BackupItems_CollectionChanged никогда не вызывается, и новый элемент не отображается в моей коллекции в моем элементе управления. Неужели я полностью отсюда? Что мне нужно сделать, чтобы это работало?