2010-07-02 7 views
3

J'ai créé la classe:WPF Reliure: comment faire de la propriété en cours de modification lorsque la propriété de sa propriété a changé

class StorageBase 
{ 
    public Queue<Slices> Slices {get;set;} 
} 

et WPF contrôle personnalisé qui a la dépendance propriété de stockage de type StorageBase:

public StorageBase Storage 
     { 
      get { return (StorageBase)GetValue(StorageProperty); } 
      set { SetValue(StorageProperty, value); } 
     } 
     public static readonly DependencyProperty StorageProperty = 
      DependencyProperty.Register("Storage", typeof(StorageBase), typeof(MaterialStreamControl), new UIPropertyMetadata(null, new PropertyChangedCallback(OnStoragePropertyChanged))); 
     static void OnStoragePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 
     { 
      (d as MaterialStreamControl).Render(); 
     } 

Comment est-ce que je pourrais rerender le composant si des tranches dans le stockage ont changé?

Répondre

1

Normalement, StorageBase implémenterait INotifyPropertyChanged. Le setter sur Slices soulèverait alors l'événement INotifyPropertyChanged.PropertyChanged.

Exemple: http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.propertychanged.aspx

EDIT: Vous pouvez également faire des tranches ObservableCollection au lieu d'une file d'attente. http://msdn.microsoft.com/en-us/library/ms668604.aspx

+0

La première méthode ne fonctionne pas. Lorsque j'ajoute une tranche à Slices, OnStoragePropertyChanged ne déclenche pas. La deuxième méthode ne convient pas car je n'ai besoin que d'une file d'attente. –

+0

Vous pouvez utiliser une ObservableCollection comme s'il s'agissait d'une file d'attente. Alternativement, vous pouvez créer votre propre classe de file d'attente qui implémente IObservableCollection. –

Questions connexes