2009-11-24 83 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); 

希望這有助於..