【发布时间】:2018-02-20 15:29:44
【问题描述】:
我有一个DataGrid,我通过ItemsSource-Property 绑定到ObservableCollection。此 DataGrid 是 IsReadOnly="True" 和 AutoGenerateColumns="False"。 (在 XAML 中添加了列)
到目前为止一切正常,但是:
当我按列对 a 进行排序时,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;
}
}
【问题讨论】:
-
默认情况下,当您对 DataGrid 进行排序时,源集合不得到排序。为什么你认为源集合被排序了?
-
在我的主窗口中,我有一个绑定到同一个 ObservableCollection 的 ComboBox。当我按 DataGrid 中的列排序时,其中的项目得到相同的排序
-
如果您希望任何人能够告诉您您做错了什么,请发布您的代码:stackoverflow.com/help/mcve
-
我不知道要发布什么代码,因为我自己一点也不知道问题出在哪里。整个项目1000多行……
-
我只是通过调试器单步完成了我的带有 DataGrid 的窗口已打开并加载。当我单击列标题时,我的 MainWindow 上的 DataGrid 和 ComboBox 会被排序,而调试器不会进入我的代码中的任何位置。
标签: c# wpf data-binding datagrid