2010-04-08 2 views
0

Existe-t-il un moyen de notifier les bindinigs d'un DependencyObject lorsque les DependencyProperties internes ont changé?Liaisons d'appel pour DependencyObject lors de la modification de DependencyProperites

Par exemple, j'ai cette classe:

public class BackgroundDef : DependencyObject 
    { 
     public static readonly DependencyProperty Color1Property = 
      DependencyProperty.Register("Color1", typeof(Color), 
       typeof(BackgroundDef), new UIPropertyMetadata(Colors.White)); 

     public static readonly DependencyProperty UseBothColorsProperty = 
      DependencyProperty.Register("UseBothColors", typeof(bool), 
       typeof(BackgroundDef), new UIPropertyMetadata(false)); 

     public static readonly DependencyProperty Color2Property = 
      DependencyProperty.Register("Color2", typeof(Color), 
       typeof(BackgroundDef), new UIPropertyMetadata(Colors.White)); 

     public Color Color1 
     { 
      set { SetValue(Color1Property, value); } 
      get { return (Color)GetValue(Color1Property); } 
     } 

     public bool UseBothColors 
     { 
      set { SetValue(UseBothColorsProperty, value); } 
      get { return (bool)GetValue(UseBothColorsProperty); } 
     } 

     public Color Color2 
     { 
      set { SetValue(Color2Property, value); } 
      get { return (Color)GetValue(Color2Property); } 
     } 
    } 

Pour que j'ai 3 liaisons dans les deux sens distincts qui définissent les valeurs pour Color1, Couleur2 et UseBothColors. Mais j'ai aussi une liaison pour une instance BackgroundDef, qui devrait créer un pinceau et dessiner l'arrière-plan d'un bouton (soit une couleur unique, soit deux couleurs dégradées). Mon problème est que les liaisons bidirectionnelles pour les DependencyProperties mettent à jour les propriétés, mais la liaison pour l'instance de classe n'est pas appelée, car apparemment l'objet entier ne change pas. Toute idée comment je pourrais appeler les liaisons pour le DependencyObject quand les DependencyProperties sont changés?

Répondre

1

Vous pouvez:

Utilisez un MultiBinding et se lier à toutes les trois valeurs au lieu de se lier à la classe. puis, chaque fois qu'une des valeurs change, la liaison sera réévaluée. (Ce qui est la technique que j'utiliserais)

Ou:

Si votre classe BackgroundDef est une propriété d'une autre classe, vous pouvez soulever un événement NotifyPropertyChanged sur cette classe chaque fois que des propriétés de BackgroundDef changer. Bien sûr, cela signifierait avoir une propriété sur BackgroundDef qui est la classe de ses parents et notifier le parent à chaque fois que l'enfant avait changé.

Questions connexes