Výchozí nastavení bindingu vlastní DependecyProperty ve WPF


Jak určit výchozí hodnotu a nastavení bindingu vlastní DependecyProperty?

Pokud chci nastavit pouze výchozí hodnotu a událost po změně hodnoty, tak stačí použít v definici property dvou parametrický konstruktor třídy PropertyMetadata, kde první parametr je právě výchozí hodnota a druhý událost po změně hodnoty. Třída PropertyMetadata má celkem 4 přetížené konstruktory – viz dokumentace)

    public static readonly DependencyProperty DescriptionProperty
      = DependencyProperty.Register("Description", 
                                    typeof(string), 
                                    typeof(DescriptionTextBox), 
                                    new PropertyMetadata(null, OnDescriptionPropertyChanged));

Pokud chci nastavit navíc ještě výchozí Mode bidningu na TwoWay a konkrétní UpdateSourceTrigger, tak je k dispozici rozšířená třída FrameworkPropertyMetadata:

    public static readonly DependencyProperty DescriptionProperty
      = DependencyProperty.Register("Description", typeof (string), typeof (DescriptionTextBox),
                                    new FrameworkPropertyMetadata
                                      {
                                        DefaultValue = null,
                                        BindsTwoWayByDefault = true,
                                        DefaultUpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged,
                                        PropertyChangedCallback = OnDescriptionPropertyChanged
                                      });

Pro úplnost ještě dodávám zbytek definice property a zmiňovanou událost po změně:

    public string Description
    {
      get { return (string)GetValue(DescriptionProperty); }
      set { SetValue(DescriptionProperty, value); }
    }


    private static void OnDescriptionPropertyChanged(object sender, DependencyPropertyChangedEventArgs e)
    {
      DescriptionTextBox textBox = sender as DescriptionTextBox;
      if (textBox == null)
        return;

      // něco
    }

, ,

Komentáře jsou uzavřeny.