数据网格视图源意外更改的WPF 4.0选项卡控件

数据网格视图源意外更改的WPF 4.0选项卡控件,wpf,datagrid,c#-4.0,tabcontrol,Wpf,Datagrid,C# 4.0,Tabcontrol,我有一个TabControl,其中每个选项卡都包含一个DataGrid。当用户在选项卡之间切换时,DataGrid似乎是从头开始创建的。我这么说是因为我注意到了三件事:列被自动重新创建,当前排序的列丢失,选择丢失 当用户返回到选项卡页面时,我希望能够保留当前的排序视图。他们可能在比较名单,让他们每次都去是没有意义的。场景的数据绑定在创建后不会更改。但是,选项卡绑定到可观察的集合,因为它们需要根据应用程序的使用方式进行添加/删除 视图模型: public ObservableCollection&

我有一个
TabControl
,其中每个选项卡都包含一个
DataGrid
。当用户在选项卡之间切换时,
DataGrid
似乎是从头开始创建的。我这么说是因为我注意到了三件事:列被自动重新创建,当前排序的列丢失,选择丢失

当用户返回到选项卡页面时,我希望能够保留当前的排序视图。他们可能在比较名单,让他们每次都去是没有意义的。场景的数据绑定在创建后不会更改。但是,选项卡绑定到可观察的集合,因为它们需要根据应用程序的使用方式进行添加/删除

视图模型:

public ObservableCollection<DataTable> Tables
{
    get
    {
        return _tables; // Tables are added/removed through secondary methods
    }
}
<TabControl ItemsSource="{Binding Path=Tables"}>
    <TabControl.ItemTemplate>
        <DataTemplate>
            <TextBlock>
                <TextBlock.Text>
                    <MultBinding StringFormat="{}{0} ({1})}>
                        <Binding Path="TableName"/>
                        <Binding Path="Rows.Count"/>
                    </MultiBinding>
                </TextBlock.Text>
            </TextBlock>
        </DataTemplate>
    </TabControl.ItemTemplate>
    <TabControl.ContentTemplate>
        <DataTemplate>
            <DataGrid
                AutoGeneratingColumns="True"
                IsReadOnly="True"
                ItemsSource="{Binding DefaultView}"
                />
        </DataTemplate>
    </TabControl.ContentTemplate>
</TabControl>
公共可观测收集表
{
得到
{
return _tables;//通过辅助方法添加/删除表
}
}
查看:

public ObservableCollection<DataTable> Tables
{
    get
    {
        return _tables; // Tables are added/removed through secondary methods
    }
}
<TabControl ItemsSource="{Binding Path=Tables"}>
    <TabControl.ItemTemplate>
        <DataTemplate>
            <TextBlock>
                <TextBlock.Text>
                    <MultBinding StringFormat="{}{0} ({1})}>
                        <Binding Path="TableName"/>
                        <Binding Path="Rows.Count"/>
                    </MultiBinding>
                </TextBlock.Text>
            </TextBlock>
        </DataTemplate>
    </TabControl.ItemTemplate>
    <TabControl.ContentTemplate>
        <DataTemplate>
            <DataGrid
                AutoGeneratingColumns="True"
                IsReadOnly="True"
                ItemsSource="{Binding DefaultView}"
                />
        </DataTemplate>
    </TabControl.ContentTemplate>
</TabControl>


我认为这与TabControl行为有关,而不是与Datagrid有关。我可能错了,但是TabControl只有一个内容区域,并且在您更改所选选项卡时切换内容,这意味着无论您做什么,都将重新创建内容。不确定有没有简单的解决方法。。。我很想听到更多知识渊博的人的回答。

TabControl就是罪魁祸首。自从这篇文章发表以来,我已经找到了一些解决办法。这里有一个链接,我觉得它是最好的解决方案。