【问题标题】:Bind to main DataContext from TabControl's DataTemplate从 TabControl 的 DataTemplate 绑定到主 DataContext
【发布时间】:2013-02-04 13:34:53
【问题描述】:

我正在尝试使用单个 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>

我猜这是因为选项卡控件的 DataTemplate 中的项目的 DataContext 与其外部的项目相比不同,但我只是在长时间休息后才重新启动我的 WPF,并且不知道如何获取 DataGrid在 DataTemplate 中正确绑定到 DataContext。

非常感谢您提供任何帮助/指点。

【问题讨论】:

    标签: wpf mvvm wpfdatagrid datatemplate datacontext


    【解决方案1】:

    DataGrid Binding 需要使用相对路径;

    <!-- 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 的任何控件

    【讨论】:

    • 太棒了,明白了,感谢 PGallagher - 来自莱斯特的一位 IT 呆子!
    • 太好了,很高兴我能帮上忙!好人要团结一致,你知道的!嘻嘻
    猜你喜欢
    • 2014-07-30
    • 1970-01-01
    • 2011-11-27
    • 2015-06-27
    • 1970-01-01
    • 1970-01-01
    • 2017-09-10
    • 1970-01-01
    • 2023-03-27
    相关资源
    最近更新 更多