wpf 我希望绑定的DataGrid也不对ItemsSource排序

esyap4oy  于 2023-05-19  发布在  其他
关注(0)|答案(2)|浏览(261)

我有一个DataGrid,我通过ItemsSource-属性绑定到ObservableCollection。此DataGrid是IsReadOnly="True"AutoGenerateColumns="False"。(列已添加到XAML中)
到目前为止,一切正常,但**:当我按列排序时,ItemsSource也会排序。我希望用户能够对列进行排序**,而**实际的ItemsSource也不会被排序。
这是可能的吗?如果是,我该如何管理?

**编辑:**问题应该可以重现。当您单击 Number-header时,ComboBox项的新顺序与DataGrid相同。

主窗口的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;
    }
}
jtjikinw

jtjikinw1#

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

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

t1qtbnec2#

我刚刚遇到了完全相同的问题,通过使用OrderBy解决了这个问题,如下所示:
cbItems.ItemsSource = ItemList.OrderBy(Item => Item.Name)

相关问题