WPF: объявления свойств XAML не устанавливаются через сеттеры?

У меня есть приложение WPF, в котором я использую свойства зависимостей в отделенном коде, которые я хочу установить с помощью объявлений XAML.

e.g.

<l:SelectControl StateType="A" Text="Hello"/>

Итак, в этом примере у меня есть UserControl с именем SelectControl, у которого есть свойство с именем StateType, которое манипулирует некоторыми другими свойствами в своем сеттере.

Чтобы проиллюстрировать проблему, я добавил в пример еще одно свойство с именем Text, читайте дальше, и я объясню дальше.

Отрывок кода...

public static readonly DependencyProperty TextProperty = DependencyProperty.Register("Text", typeof(String), typeof(SelectControl));

public String Text
{
  get { return (String)GetValue(TextProperty); }
  set { SetValue(TextProperty, value); }
}

public static readonly DependencyProperty StateTypeProperty = DependencyProperty.Register("StateType", typeof(String), typeof(SelectControl));

public String StateType
{
  get { return (String)GetValue(StateTypeProperty) }
  set
    {
      switch (value)
      {
        case "A":
          AnotherPropertyBoolean = true;
          break;
        case "B":
          AnotherPropertyBoolean = false;
          break;
       default:
         // this is only an example... 
      }
   }
}

Теперь, если я устанавливаю точку останова на установщике (для StateType или Text), оказывается, что он никогда не выполняется.

Однако значения, объявленные для Text, то есть «Hello», появляются в его привязке к данным TextBox, и, конечно же, я привязываю другой текстовый элемент управления к значению StateType, я тоже это вижу.

Кто-нибудь знает, что происходит?


person ocodo    schedule 01.10.2010    source источник


Ответы (1)


«CLR-обертки» для свойств зависимостей вызываются только тогда, когда это делается через код. XAML зависит от имени, указанного в вызове DependencyProperty.Register(...). Итак, вместо «расширения» логики установщика для вашего свойства зависимости, как вы делали выше, просто поместите свою пользовательскую логику в PropertyChangedCallback.

person ASanch    schedule 01.10.2010