ObservableCollection en tant que DependencyProperty
Je suis la création d'une application dans laquelle une liste d'objets devraient être interceptées et traduits avant d'être affichés sur un groupe de contrôles. À cette fin, j'ai créé une DependencyProperty de type ObservableCollection (BackupEntry être une classe personnalisée définir l'information sur une base de données). Ce que je veux, c'est que le contrôle est lié à une ObservableCollection dans un MVVM. Cette collection pourrait être utilisé pour d'abord charger le contrôle. Ensuite, lorsqu'une entrée est ajoutée via l'interface de contrôle, il doit être ajouté à l'intérieur ObservableCollection qui est défini comme une DependencyProperty et de montrer dans la collection de l'MVVM puisqu'ils sont liés. Voici le code que j'utilise:
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();
}
Et dans l'application de test:
<my:ExplorerWindow Name="ew" HorizontalAlignment="Left" VerticalAlignment="Top" Width="503" Height="223" BackupItems="{Binding BackupListItems}" />
J'ai créé un bouton sur l'écran de mon application de test. Lorsqu'il est cliqué, un élément est ajouté à BackupListItems. BackupItems_CollectionChanged n'est jamais appelé et le nouvel élément ne s'affiche pas dans ma collection dans mon contrôle. Suis-je totalement hors piste ici? Que dois-je faire pour obtenir ce travail?
source d'informationauteur Dirk Dastardly
Vous devez vous connecter pour publier un commentaire.
Vous devez suivre le modèle donné dans cette question. Vous devez vous abonner à la
CollectionChanged
événement au sein de laPropertyChanged
gestionnaire comme c'est indiqué dans le lien ci-dessus.la collecte changé événement n'est souscrite pour la valeur par défaut de BackupItems que vous définissez dans le ExplorerWindow constructeur. Ensuite, vous remplacez la valeur par défaut avec la collection dans votre viewmodel - dont vous n'avez pas souscrit. Vous devez vous abonner à collectionchanged à chaque fois que la propriété est définie. Vous pouvez utiliser la surcharge de DependencyProperty.Registre qui accepte un PropertyMetadata et de fournir une fonction de rappel pour lors de la modification de la propriété. Voici un croquis - n'ont pas compilé mais devraient vous diriger dans la bonne direction.