2009-11-24 2 views
0

У меня есть вкладка с двумя вкладками. содержимое каждой вкладки привязывается к элементу ListCollectionView, а шаблон данных имеет сетку, показывающую элементы. Проблема в том, что если вы нажмете на любой из сортируемых столбцов, если я выберу другую вкладку и вернусь на первую вкладку, сортировка будет удалена. Это известная ошибка?WPF Toolkit Ошибка Datagrid

вот код:

<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 уничтожить и воссоздать его ребенок каждый раз при смене выбранной вкладки. Это объясняет, почему сортировка не сохраняется.

Вы можете проверить this discussion в группе Google Учеников WPF, чтобы получить информацию о том, как исправить эту проблему.

+0

Благодаря я дам ему тест и посмотреть, если это помогает. Хотя он работает, когда вы жестко кодируете datagrid на вкладке. Я полагаю, что вкладка создает все с нуля, только если вы используете шаблон –

0

У меня возникла аналогичная проблема. Я думаю, что wpf использует тот же contentpresenter для шаблонов данных. В вашем случае экземпляр datagrid тот же, только данные восстанавливаются при переключении вкладок. Что я сделал, так это создать экземпляр элемента управления в коде и установить его как свойство содержимого TabItem.

например
TabItem ti = new TabItem(); 
ti.DataContext = intt; 
ti.Content = new DataGrid(); 
myTabControl.Items.Add(t); 

надеюсь, что это помогает ..