【问题标题】:WPF Toolkit Datagrid BugWPF 工具包数据网格错误
【发布时间】:2010-12-19 19:15:25
【问题描述】:

我有一个带有 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>

隐藏代码:

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

【问题讨论】:

    标签: wpf sorting datagrid wpftoolkit toolkit


    【解决方案1】:

    我认为每次更改所选选项卡时 TabControl 都会破坏并重新创建其子项。这可以解释为什么不保留排序。

    您可以查看 WPF Disciples Google Group 上的 this discussion,了解有关如何解决该问题的一些信息。

    【讨论】:

    • 谢谢,我会给它一个测试,看看它是否有帮助。虽然当您在选项卡中对数据网格进行硬编码时它确实有效。我猜只有当你使用模板时,标签才会从头开始创建所有内容
    【解决方案2】:

    我遇到了类似的问题。我认为 wpf 对数据模板使用相同的 contentpresenter。在您的情况下,数据网格的实例是相同的,只有在您切换选项卡时才会反弹数据。 我所做的是在代码隐藏中创建控件的实例并将其设置为 TabItem 的内容属性。 例如

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

    希望这会有所帮助..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-13
      • 1970-01-01
      • 2010-11-26
      • 1970-01-01
      • 2011-06-15
      • 2010-12-06
      • 1970-01-01
      相关资源
      最近更新 更多