Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 从TabControl的DataTemplate绑定到主DataContext_Wpf_Mvvm_Wpfdatagrid_Datatemplate_Datacontext - Fatal编程技术网

Wpf 从TabControl的DataTemplate绑定到主DataContext

Wpf 从TabControl的DataTemplate绑定到主DataContext,wpf,mvvm,wpfdatagrid,datatemplate,datacontext,Wpf,Mvvm,Wpfdatagrid,Datatemplate,Datacontext,我尝试使用单个DataGrid作为选项卡控件中每个选项卡的内容,然后我将重新加载网格的内容,以在单击不同选项卡时显示处于不同状态的模型 但是,由于某种原因,DataGrid在TabControl的DataTemplate内时无法绑定。但是,在页面的主流程中,使用相同的Datagrid XAML和绑定可以完美地工作 <!-- first grid works perfectly--> <DataGrid ItemsSource="{Binding RANsToDisplay}"

我尝试使用单个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,并且不确定如何使DataTemplate中的DataGrid正确绑定到DataContext


非常感谢您的帮助/指点。

您需要为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的控件即可

您需要为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更改为存放数据上下文的任何控件即可

Brilliant,明白了,感谢PGallagher-来自莱斯特it dweeb的同事!太好了,很高兴我能帮忙!好人必须团结一致,你知道!TeeheeBrilliant,明白了,谢谢PGallagher——来自莱斯特it dweeb的同事!太好了,很高兴我能帮忙!好人必须团结一致,你知道!提伊