2009-11-24 81 views
0

我有一个带有2个选项卡的选项卡控件。每个选项卡的内容绑定到ListCollectionView,并且数据模板具有显示项目的网格。问题是,如果你点击任何一列进行排序,如果我选择另一个标签并返回到第一个标签,排序将被清除。这是一个已知的错误吗?WPF工具包Datagrid Bug

这里是代码:

<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

我认为TabControl的破坏和每次更改所选选项卡时创建其子。这将解释为什么不保留这种排序。

你可以在WPF Disciples Google Group上查看this discussion以获取有关如何解决该问题的一些信息。

+0

感谢 我会给它一个测试,看看是否有帮助。 虽然它确实工作,当您在选项卡中的数据网格硬编码。我猜想,只有使用模板,该选项卡才会从头开始创建所有内容 – 2009-11-24 11:37:38

0

我曾遇到过类似的问题。我认为wpf对数据模板使用相同的contentpresenter。在你的情况下,datagrid的实例是一样的,只有当你切换标签时数据才会被反弹。 我所做的是在代码隐藏中创建控件的实例,并将其设置为TabItem的内容属性。 e.g

TabItem ti = new TabItem(); 
ti.DataContext = intt; 
ti.Content = new DataGrid(); 
myTabControl.Items.Add(t); 

希望这有助于..