Ошибка сетки данных WPF Toolkit

у меня есть управление вкладками с 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>

code 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; }
    }
}

person Amit Raz    schedule 24.11.2009    source источник


Ответы (2)


Я думаю, что TabControl уничтожает и воссоздает свой дочерний элемент каждый раз, когда вы меняете выбранную вкладку. Это объясняет, почему сортировка не сохраняется.

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

person japf    schedule 24.11.2009
comment
Спасибо, попробую, может поможет. Хотя это работает, когда вы жестко кодируете сетку данных на вкладке. Я предполагаю, что вкладка создает все с нуля, только если вы используете шаблон - person Amit Raz; 24.11.2009

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

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

надеюсь это поможет..

person netraju    schedule 03.12.2009