23

我正在尝试找出 HeaderedContentControl 中的项目在不是我的项目中来自哪里。这是代码:

        <HeaderedContentControl 
            Content="{Binding Path=Workspaces}"
            ContentTemplate="{StaticResource WorkspacesTemplate}"
            Header="Workspaces"
            Style="{StaticResource MainHCCStyle}" 
            DataContext="{Binding}" // <--- this 
       />

<DataTemplate x:Key="WorkspacesTemplate">
<TabControl 
  IsSynchronizedWithCurrentItem="True" 
  ItemsSource="{Binding}" 
  ItemTemplate="{StaticResource ClosableTabItemTemplate}"
  Margin="4"
  />

所以让我们检查一下:

  1. ContentTemplate 属性描述了项目的显示方式。
  2. WorkspacesTemplate 将 ItemsSource 的属性设置为 {Binding},这意味着它已绑定到其 DataContext 属性(HeaderedContentControl 的 DataContext)
  3. 所以我查看了 HeaderedContentControl 的 dataContext,但它也被描述为“{Binding}”......

这意味着什么?

4

2 回答 2

26

如果没有看到更多代码,很难确定,但DataContext="{Binding}"通常是不必要的,因为当前绑定上下文中的任何对象都会自动将其DataContext属性设置为{Binding}.

记住:

  • Property="{Binding}"意思是“设置this.Property为”的评估this.DataContext
  • Property="{Binding Path=SubProperty}"意思是“设置this.Property为”的评估this.DataContext.SubProperty
  • ETC

这意味着这DataContext="{Binding}"意味着“设置this.DataContext为”的评估值this.DataContext,这(在大多数情况下)是多余的!

于 2012-12-20T09:04:16.377 回答
5

{Binding}类似于绑定'this'或当前数据上下文-从父母分配或继承。为了更好地理解,等价于{Binding}is{Binding .}{Binding Path=.}

于 2015-02-27T14:20:43.123 回答