什么能够绑定到不存在的属性(仅限TreeViewItem?)

时间:2012-04-23 14:27:00

标签: wpf xaml dynamic treeview styles

在我的xaml中,我有一些看起来像:

<TreeView.ItemContainerStyle>
    <Style TargetType="TreeViewItem">
        <Setter Property="IsExpanded" Value="{Binding Path=IsExpandedOverridedInModelView, Mode=TwoWay}"/>
    </Style>
</TreeView.ItemContainerStyle>

此代码完美无缺。

My TreeView绑定到包装DataLayer层次结构的ModelView层次结构(MVVM)。另一个层次结构上的层次结构包装器。我的有界ModelView层次结构添加了一些属性,如(IsSelected和IsExpandedOverridedInModelView)。此代码主要定义TreeView.IsExpanded属性和我的ModelView层次结构属性之间的绑定:“IsExpandedOverridedInModelView”。

但有些事情我无法想象......

每个人都知道TreeViewItem类没有名为“IsExpandedOverridedInModelView”的属性。这个属性是我的底层对象的一部分(我的ModelView中的对象在TreeViewItem后面)。我有2个相关问题:

  • 什么会使该声明成为可能?实现这种行为的扭曲是什么?
  • 如何声明为了删除〜“警告”说“无法解析符号'IsExpandedOverridedInModelView'”(如何以干净的方式声明)?

我认为TreeViewItem将派生自DynamicObject,但事实并非如此。

1 个答案:

答案 0 :(得分:3)

TreeViewItem IsExpanded property。任何告诉你的警告都是某些IDE垃圾的结果。绑定是指DataContext,它可能有也可能没有这样的属性,只有在运行时才会计算,除非你使用设计器(同样,警告只是IDE垃圾)。