DataContext =“{Binding}”是什么意思?

时间:2012-12-20 08:53:53

标签: c# wpf xaml

我正在尝试找出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 个答案:

答案 0 :(得分:24)

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

记住:

  • Property="{Binding}"表示“将this.Property设置为评估值this.DataContext
  • Property="{Binding Path=SubProperty}"表示“将this.Property设置为评估值this.DataContext.SubProperty

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

答案 1 :(得分:4)

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