【问题标题】:ItemsSource="{Binding}" without an apparent DataContextItemsSource="{Binding}" 没有明显的 DataContext
【发布时间】:2015-05-27 14:06:54
【问题描述】:

我正在学习 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}">

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

>>更新:

基于 cmets,我现在了解到数据上下文来自使用 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 行,以防您看不到它。

【问题讨论】:

    标签: .net wpf xaml


    【解决方案1】:

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

    因此,无论您在何处使用此数据模板,该控件都会设置上下文。

    【讨论】:

    • 请查看我的问题的更新。我已包含使用模板但找不到数据上下文的 XAML。
    • 在你的情况下,它是窗口的数据上下文
    • 具体是在哪里定义的?我实际上在窗口的 XAML 中找不到术语“DataContext”。
    • 好吧,如果你没有使用任何框架,最有可能的地方是代码后面
    • XAML中不需要保留DataContext,有时间可以找到后面代码中定义的DataContext。
    猜你喜欢
    • 2011-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-21
    • 2010-11-29
    • 2011-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多