我有一个带有2个标签的标签控件。每个选项卡的内容绑定到ListCollectionView,数据模板有一个显示项目的网格。问题是,如果单击要排序的任何列,如果我选择其他选项卡并返回到第一个选项卡,则清除排序。这是一个已知的错误吗?
这是代码:
<Window x:Class="WpfApplication3.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:toolkit="http://schemas.microsoft.com/wpf/2008/toolkit"
Title="Window1" Height="538" Width="1223">
<Window.Resources>
<DataTemplate x:Key="TestTemplate">
<toolkit:DataGrid ItemsSource="{Binding}" AutoGenerateColumns="false" IsReadOnly="True" >
<toolkit:DataGrid.Columns>
<toolkit:DataGridTextColumn Binding="{Binding IntVal}" Header="Number"></toolkit:DataGridTextColumn>
<toolkit:DataGridTextColumn Binding="{Binding StringVal}" Header="String"></toolkit:DataGridTextColumn>
</toolkit:DataGrid.Columns>
</toolkit:DataGrid>
</DataTemplate>
</Window.Resources>
<Grid>
<TabControl>
<TabItem Header="tab1" ContentTemplate="{StaticResource TestTemplate}" x:Name="a" Content="{Binding}"/>
<TabItem Header="tab2" ContentTemplate="{StaticResource TestTemplate}" x:Name="b" Content="{Binding}"/>
</TabControl>
</Grid>
代码behid:
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
List<test> intt = new List<test>
{
new test { IntVal = 5, StringVal = "abc" },
new test { IntVal = 12, StringVal = "cc" },
new test { IntVal = 2, StringVal = "sdgc" },
new test{IntVal=64,StringVal="df"},
new test{IntVal=1234,StringVal="werw"},
new test{IntVal=14,StringVal="sdvvd"},
new test{IntVal=136,StringVal="aasr"}
};
List<test> intt2 = new List<test>
{
new test { IntVal = 5, StringVal = "abc" },
new test { IntVal = 12, StringVal = "cc" },
new test { IntVal = 2, StringVal = "sdgc" },
new test{IntVal=64,StringVal="df"},
new test{IntVal=1234,StringVal="werw"},
new test{IntVal=14,StringVal="sdvvd"},
new test{IntVal=136,StringVal="aasr"}
};
this.a.DataContext = new ListCollectionView(intt);
this.b.DataContext = new ListCollectionView(intt2);
}
public class test
{
public int IntVal { get; set; }
public string StringVal { get; set; }
}
}
答案 0 :(得分:0)
我认为TabControl每次更改选定的选项卡时都会销毁并重新创建其子项。这可以解释为什么不保留这种排序。
您可以在WPF门徒Google小组上查看this discussion,了解如何解决该问题。
答案 1 :(得分:0)
我遇到过类似的问题。我认为wpf对数据模板使用相同的contentpresenter。在您的情况下,datagrid的实例是相同的,只有在切换选项卡时才会反弹数据。 我所做的是在codebehind中创建一个控件实例,并将其设置为TabItem的内容属性。 e.g
TabItem ti = new TabItem();
ti.DataContext = intt;
ti.Content = new DataGrid();
myTabControl.Items.Add(t);
希望这会有所帮助..