我希望我的绑定DataGrid也不会对ItemsSource进行排序

时间:2018-02-20 15:29:44

标签: c# wpf data-binding datagrid

我有DataGrid我通过ObservableCollection - 属性绑定到ItemsSource。此DataGrid为IsReadOnly="True"AutoGenerateColumns="False"。 (列在XAML中添加)

到目前为止一切正常,: 当我按列排序时,ItemsSource也会被排序。我希望用户能够对列进行排序,而不会对正在排序的实际ItemsSource进行排序。

这是可能的,如果是的话,我该如何管理呢?

修改 问题应该可以重现。当您点击数字 -header时,ComboBox项目与DataGrid具有相同的新订单。

MainWindow的XAML:

<DockPanel LastChildFill="True">
    <ComboBox DockPanel.Dock="Bottom" Name="cbItems" IsEditable="True"/>
    <DataGrid Name="dataGrid" AutoGenerateColumns="False" IsReadOnly="True">
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding Name}" Header="Name"/>
            <DataGridTextColumn Binding="{Binding SomeNumber}" Header="SomeNumber"/>
        </DataGrid.Columns>
    </DataGrid>
</DockPanel>

代码:

public partial class MainWindow : Window
{
    ObservableCollection<Item> ItemList;

    public MainWindow()
    {
        InitializeComponent();

        ItemList = new ObservableCollection<Item>();

        Random rnd = new Random();
        for(int i = 0; i < 15; i++)
            ItemList.Add(new Item("blabla" + rnd.Next(10, 100), rnd.Next(10000, 100000)));

        dataGrid.ItemsSource = ItemList;
        cbItems.ItemsSource = ItemList;
    }
}

public class Item
{
    private string name;
    private int number;

    public Item(string name, int number)
    {
        this.name = name;
        this.number = number;
    }

    public string Name { get { return name; } set { name = value; } }
    public int SomeNumber { get { return number; } set { number = value; } }

    public override string ToString()
    {
        return name;
    }
}

1 个答案:

答案 0 :(得分:1)

您应该能够通过将ItemsSource属性设置为两个独立视图来克服两个控件将引用相同集合视图的事实:

dataGrid.ItemsSource = new ListCollectionView(ItemList);
cbItems.ItemsSource = new ListCollectionView(ItemList);