数据网格视图源意外更改的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就是罪魁祸首。自从这篇文章发表以来,我已经找到了一些解决办法。这里有一个链接,我觉得它是最好的解决方案。