ItemsSource =“{Binding}”没有明显的DataContext

时间:2015-05-27 14:06:54

标签: .net wpf xaml

我正在学习WPF并正在学习this MSDN resource。目前,我正在关注来自提供的可下载代码的数据模板中的特定行:

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

我理解,例如来自this SO post等资源,ItemsSource="{Binding}"将绑定到关联的DataContext,但后者SO帖子中的示例显示DataContext

<ListView 
DataContext="{StaticResource XMLFileGroups}"
ItemContainerStyle="{StaticResource XMLItemStyle}"
ItemsSource="{Binding}">

我在上面的例子中找不到一个。有人可以帮我看看我在这里缺少什么吗?

&gt;&gt;更新:

基于评论,我现在明白数据上下文来自使用DataTemplate的容器,因此这里是来自MainWindow的XAML,其中使用了模板。请注意,我仍无法在任何地方找到DataContext

<Window 
  x:Class="DemoApp.MainWindow"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:vm="clr-namespace:DemoApp.ViewModel"
  FontSize="13" 
  FontFamily="Verdana"
  MinWidth="650" MinHeight="420"
  Title="{Binding Path=DisplayName}"
  Width="650" Height="420"
  WindowStartupLocation="CenterScreen"
  >
  <Window.Resources>
    <ResourceDictionary Source="MainWindowResources.xaml" />
  </Window.Resources>

  <DockPanel>
    <DockPanel DockPanel.Dock="Top" KeyboardNavigation.TabNavigation="None">
      <Menu KeyboardNavigation.TabNavigation="Cycle">
        <MenuItem Header="_File">
          <MenuItem Header="E_xit" Command="{Binding Path=CloseCommand}" />
        </MenuItem>
        <MenuItem Header="_Edit" />
        <MenuItem Header="_Options" />
        <MenuItem Header="_Help" />
      </Menu>
    </DockPanel>

    <Grid Margin="4">
      <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="4" />
        <ColumnDefinition Width="*" />
      </Grid.ColumnDefinitions>

      <Border 
        Grid.Column="0" 
        Style="{StaticResource MainBorderStyle}"
        Width="170"
        >
        <HeaderedContentControl
          Content="{Binding Path=Commands}"
          ContentTemplate="{StaticResource CommandsTemplate}"
          Header="Control Panel"
          Style="{StaticResource MainHCCStyle}"
          />
      </Border>

      <Border
        Grid.Column="2" 
        Style="{StaticResource MainBorderStyle}"
        >
        <HeaderedContentControl 
          Content="{Binding Path=Workspaces}"
          ContentTemplate="{StaticResource WorkspacesTemplate}"
          Header="Workspaces"
          Style="{StaticResource MainHCCStyle}"
          />
      </Border>
    </Grid>
  </DockPanel>
</Window>

仅供参考,WorkspacesTemplate从底部开始使用8行,以防您无法看到。

1 个答案:

答案 0 :(得分:1)

第一种情况下的数据上下文是由应用此模板的父控件提供的上下文。

因此,只要您使用此数据模板,该控件就会设置上下文。

相关问题