Что такое присоединяемые свойства в WPF
Что проверяют
Понимает ли кандидат систему свойств WPF, а не только синтаксис разметки. На присоединяемых свойствах стоит вся компоновка: положение в сетке, отступ в канве, сторона стыковки задаются на дочернем элементе, а читает их родительская панель. Кто это понял, тот объяснит и привязки, и присоединяемые поведения в MVVM.
Как отвечать
Определение: свойство, объявленное одним типом и устанавливаемое на объекте другого типа. Значение хранится в самом целевом объекте, поэтому цель обязана быть наследником DependencyObject, а не произвольным классом.
Регистрация и пара статических аксессоров обязательны, именно по ним разметку разбирает парсер.
public static class FocusOnLoad
{
public static readonly DependencyProperty EnabledProperty =
DependencyProperty.RegisterAttached(
"Enabled", typeof(bool), typeof(FocusOnLoad),
new PropertyMetadata(false, OnEnabledChanged));
public static void SetEnabled(DependencyObject o, bool v) => o.SetValue(EnabledProperty, v);
public static bool GetEnabled(DependencyObject o) => (bool)o.GetValue(EnabledProperty);
}Скажите, зачем это нужно: добавить поведение готовому элементу управления без наследования и без кода в представлении, передать данные родительской панели, связать событие с командой модели представления.
Где спотыкаются
Не могут назвать отличие от обычного свойства зависимости. Обычное регистрируется для экземпляров своего же типа, присоединяемое регистрируется отдельным методом, ставится на чужой объект, а доступ к нему идёт через статические методы, а не через обёртку свойства.
Нарушают соглашение об именах. Поле обязано называться по имени свойства с суффиксом Property, методы доступа обязаны называться по тому же имени с префиксами Get и Set. Компилятор промолчит, а разметка упадёт уже при разборе, в рантайме.
Подписываются на события элемента в обработчике изменения значения и не отписываются при обратной установке или выгрузке. Статический класс держит ссылку, элемент не собирается, и утечка выглядит как медленно растущая память в долгоживущем окне.