我有一个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;
}
}
2条答案
按热度按时间jtjikinw1#
您应该能够通过将
ItemsSource
属性设置为两个独立的视图来克服两个控件将引用同一集合视图的事实:t1qtbnec2#
我刚刚遇到了完全相同的问题,通过使用OrderBy解决了这个问题,如下所示:
cbItems.ItemsSource = ItemList.OrderBy(Item => Item.Name)