我有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;
}
}
答案 0 :(得分:1)
您应该能够通过将ItemsSource
属性设置为两个独立视图来克服两个控件将引用相同集合视图的事实:
dataGrid.ItemsSource = new ListCollectionView(ItemList);
cbItems.ItemsSource = new ListCollectionView(ItemList);