从TabControl的DataTemplate绑定到主DataContext

时间:2013-02-19 18:30:41

标签: wpf mvvm wpfdatagrid datatemplate datacontext

我正在尝试使用单个DataGrid作为选项卡控件中每个选项卡的内容(然后我将重新加载网格的内容,以便在单击不同选项卡时显示不同状态的模型)。

但是,由于某种原因,当DataGrid位于TabControl的DataTemplate中时,它无法绑定。相同的Datagrid XAML和绑定在页面的主流程中工作正常。

<!-- first grid works perfectly-->
<DataGrid ItemsSource="{Binding RANsToDisplay}" />

<TabControl>                
    <TabControl.ContentTemplate>
        <DataTemplate>
            <!-- Second grid fails to bind-->
            <DataGrid ItemsSource="{Binding RANsToDisplay}" />
        </DataTemplate>
    </TabControl.ContentTemplate>

    <TabItem Header="Calls"></TabItem>
    <TabItem Header="Collections"></TabItem>
    <TabItem Header="Receipts"></TabItem>
</TabControl>

我想这是因为Tab Control的DataTemplate中的项目的DataContext与它之外的项目相比有所不同,但我只是在长时间休息之后才重新开启我的WPF头,并且我不确定如何获取DataGrid在DataTemplate中正确绑定到DataContext。

非常感谢任何帮助/指针。

1 个答案:

答案 0 :(得分:3)

您需要使用DataGrid绑定的相对路径;

<!-- first grid works perfectly-->
<DataGrid ItemsSource="{Binding RANsToDisplay}" />

<TabControl>                
    <TabControl.ContentTemplate>
        <DataTemplate>
            <!-- Second grid fails to bind-->
            <DataGrid ItemsSource="{Binding DataContext.RANsToDisplay, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" />
        </DataTemplate>
    </TabControl.ContentTemplate>

    <TabItem Header="Calls"></TabItem>
    <TabItem Header="Collections"></TabItem>
    <TabItem Header="Receipts"></TabItem>
</TabControl>

只需将UserControl更改为您的DataContext所需的控件