如果您查看Selector
和TabItem
个类,他们显然都拥有IsSelectedProperty
。
static Selector()
{
...
IsSelectedProperty = DependencyProperty.RegisterAttached("IsSelected", typeof(bool), typeof(Selector), ...);
...
}
static TabItem()
{
IsSelectedProperty = Selector.IsSelectedProperty.AddOwner(typeof(TabItem), ...);
...
}
所以我想我的问题是......因为Tabitem包含实际的propertychanged逻辑,所以IsSelectedProperty甚至驻留在Selector
类中的意义是什么?
答案 0 :(得分:2)
在这种特定情况下,Selector
包含IsSelected
DP,因为有许多控件可以从中导出,其项目可以选择(ComboBox
,ListBox
, ListView
,TabControl
,DataGrid
)。它们都需要能够使用IsSelected
标记项目,因此DP在其公共基类中声明。就像蒂姆所说,干。
TabItem
将自己添加为所有者的另一个原因是,在Selector
类中,IsSelected
是附加属性,因为您可以将任何内容作为{{{1}中的项目。 1}}。附属的房产非常流动。
但是,Selector
将自己添加为所有者,因此它不是TabItem
上的附加属性。它还注册了一个在值发生变化时调用的回调方法,以便在选择或取消选择时可以执行一些操作。
是的,更容易输入TabItem
并在Intellisense中查看<TabItem
而不是去,“但我怎么选择一个?”并且必须四处寻找并发现你需要使用其他类别的附属物。
答案 1 :(得分:1)
它基本上只是DRY的一个实例(不要重复自己)。以下是来自MSDN论坛的主题: