依赖属性 - 拥有2个所有者有什么意义?

时间:2011-05-19 02:03:59

标签: wpf selector dependency-properties tabitem

如果您查看SelectorTabItem个类,他们显然都拥有IsSelectedProperty

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

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

所以我想我的问题是......因为Tabitem包含实际的propertychanged逻辑,所以IsSelectedProperty甚至驻留在Selector类中的意义是什么?

2 个答案:

答案 0 :(得分:2)

在这种特定情况下,Selector包含IsSelected DP,因为有许多控件可以从中导出,其项目可以选择(ComboBoxListBoxListViewTabControlDataGrid)。它们都需要能够使用IsSelected标记项目,因此DP在其公共基类中声明。就像蒂姆所说,干。

TabItem将自己添加为所有者的另一个原因是,在Selector类中,IsSelected是附加属性,因为您可以将任何内容作为{{{1}中的项目。 1}}。附属的房产非常流动。

但是,Selector将自己添加为所有者,因此它不是TabItem上的附加属性。它还注册了一个在值发生变化时调用的回调方法,以便在选择或取消选择时可以执行一些操作。

是的,更容易输入TabItem并在Intellisense中查看<TabItem而不是去,“但我怎么选择一个?”并且必须四处寻找并发现你需要使用其他类别的附属物。

答案 1 :(得分:1)

它基本上只是DRY的一个实例(不要重复自己)。以下是来自MSDN论坛的主题:

DependencyProperty.AddOwner - What's the Point