Estoy creando una aplicación en la que se debe interceptar y traducir una lista de objetos antes de mostrarla en un grupo de controles. Con este fin, he creado una DependencyProperty de tipo ObservableCollection (BackupEntry es una clase personalizada que define información sobre una base de datos). Lo que quiero que suceda es que el control estará ligado a una ObservableCollection en un MVVM. Esta colección podría usarse para cargar inicialmente el control. Luego, cuando se agrega una entrada a través de la interfaz de control, debe agregarse a la ObservableCollection interna que se define como DependencyProperty y aparecer en la colección en MVVM, ya que están vinculados. Aquí está el código que estoy usando:ObservableCollection como DependencyProperty
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();
}
Y en la aplicación de prueba:
<my:ExplorerWindow Name="ew" HorizontalAlignment="Left" VerticalAlignment="Top" Width="503" Height="223" BackupItems="{Binding BackupListItems}" />
he creado un botón en la pantalla en mi aplicación de prueba. Cuando se hace clic, se agrega un elemento a BackupListItems. BackupItems_CollectionChanged nunca se llama y el nuevo elemento no se muestra en mi colección bajo mi control. ¿Estoy completamente fuera de pista aquí? ¿Qué debo hacer para que esto funcione?
Es el código por encima de su modelo de vista? Si es así, ¿por qué usa objetos Dependency en lugar de Properties –
? No, el código anterior es código subyacente para mi control. No hay una correlación directa entre los datos que se ingresan en la lista y los controles que se usan para mostrarlos. DependencyObject está destinado a exponer la lista para que pueda ser enlazada y los datos pasados ay desde el control. –