Сеттеры не работают на свойствах зависимостей? - PullRequest
36 голосов
/ 19 ноября 2010

Просто короткий вопрос, чтобы прояснить некоторые сомнения.Не запускаются ли сеттеры, когда элемент привязан к свойству зависимости?

public string TextContent
{
    get { return (string)GetValue(TextContentProperty); }
    set { SetValue(TextContentProperty, value); Debug.WriteLine("Setting value of TextContent: " + value); }
}

public static readonly DependencyProperty TextContentProperty =
    DependencyProperty.Register("TextContent", typeof(string), typeof(MarkdownEditor), new UIPropertyMetadata(""));

...

<TextBox Text="{Binding TextContent}" />

Как я заметил ниже, мой сеттер не запускается

Debug.WriteLine("Setting value of TextContent: " + value);

Ответы [ 2 ]

49 голосов
/ 19 ноября 2010

Механизм привязки WPF вызывает GetValue и SetValue напрямую (в обход установщиков и получателей свойств).Это свойство должно быть там, чтобы оно могло поддерживаться в разметке XAML (и правильно компилироваться).

39 голосов
/ 19 ноября 2010

Чтобы создать DependencyProperty, добавьте статическое поле типа DepdencyProperty к вашему типу и вызовите DependencyProperty.Register (), чтобы создать экземпляр свойства зависимостей. Имя DependendyProperty всегда должно заканчиваться на ... Свойство. Это соглашение об именах в WPF.

Чтобы сделать его доступным как обычное свойство .NET, вам нужно добавить оболочку свойства. Эта оболочка делает только внутреннее получение и установку значения с помощью методов GetValue () и SetValue (), унаследованных от DependencyObject, и передачи DependencyProperty в качестве ключа.

Не добавляйте никакой логики к этим свойствам, потому что они вызываются только когда вы устанавливаете свойство из кода. Если вы устанавливаете свойство из XAML, метод SetValue () вызывается напрямую.

Каждый DependencyProperty предоставляет обратные вызовы для уведомления об изменениях, приведения значений и проверки. Эти обратные вызовы зарегистрированы в свойстве зависимости.

источник: http://www.wpftutorial.net/DependencyProperties.html

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