Свойства зависимости - какой смысл иметь 2 владельцев? - PullRequest
1 голос
/ 19 мая 2011

Если вы посмотрите на Selector и TabItem классы, то они, очевидно, оба владеют IsSelectedProperty.

static Selector()
{
    ...
    IsSelectedProperty = DependencyProperty.RegisterAttached("IsSelected", typeof(bool), typeof(Selector), ...);
    ...
}

static TabItem()
{
    IsSelectedProperty = Selector.IsSelectedProperty.AddOwner(typeof(TabItem), ...);
    ...
}

Итак, я предполагаю, что мой вопрос ... так как Tabitem содержит реальную логику изменения свойств, какой смысл в IsSelectedProperty, даже находящемся в классе Selector?

Ответы [ 2 ]

2 голосов
/ 19 мая 2011

В этом конкретном случае Selector имеет DP IsSelected, потому что есть ряд элементов управления, которые вытекают из него, элементы которых могут быть выбраны (ComboBox, ListBox, ListView, TabControl, DataGrid). Всем им нужна возможность пометить элемент с помощью IsSelected, поэтому DP объявлен в их общем базовом классе. Как сказал Тим, СУХОЙ.

Другая причина, по которой TabItem добавляет себя в качестве владельца, заключается в том, что в классе Selector IsSelected является вложенным свойством, поскольку в Selector можно иметь практически все, что угодно в качестве элемента. Прикрепленные свойства довольно мобильны.

Однако TabItem добавляет себя в качестве владельца, так что он не является присоединенным свойством TabItem. Он также регистрирует метод обратного вызова, который вызывается при изменении значения, так что он может делать несколько вещей, когда он выбран или не выбран.

И да, легче набрать <TabItem и увидеть IsSelected в Intellisense, а не идти: «Но, черт возьми, я могу сделать один выбранным?» и вам придется искать и находить, что вам нужно использовать прикрепленное свойство из другого класса.

1 голос
/ 19 мая 2011

Это в основном просто пример СУХОГО (не повторяйте себя).Вот тема на форумах MSDN по теме:

DependencyProperty.AddOwner - в чем смысл

...