Сети не работают в свойствах зависимостей?

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

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);

Ответ 1

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

Ответ 2

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

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

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

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

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