WPF: объявления свойств XAML не устанавливаются через сеттеры? - PullRequest
5 голосов
/ 01 октября 2010

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

например,

<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.значение Я тоже это вижу.

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

1 Ответ

14 голосов
/ 01 октября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...