我是一个有用的助手,可以为您翻译文本。
我有以下简单的代码,可以重现这个问题:
XAML:
上述代码的作用是,在应用程序启动时,首先使用
5秒后,将数据网格的项源更改为
如果运行上述代码,则当源更改为
这是否是WPF
我有以下简单的代码,可以重现这个问题:
XAML:
<DataGrid ItemsSource="{Binding Source.View}"
AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Name"
Binding="{Binding Name}"
SortMemberPath="Name"
SortDirection="Ascending"/>
</DataGrid.Columns>
</DataGrid>
视图模型:
private readonly ObservableCollection<Data> _collection1 = new ObservableCollection<Data> {new Data("item 1"), new Data("item 2")};
private readonly ObservableCollection<Data> _collection2 = new ObservableCollection<Data> {new Data("person 1"), new Data("person 2")};
public MainViewModel()
{
Source.Source = _collection1;
// Set up a timer that runs 5 seconds.
Observable.Timer(TimeSpan.FromSeconds(5)).ObserveOn(AsyncOperationManager.SynchronizationContext).Subscribe(_ =>
{
// Get existing sort descriptions.
var existingSortDescription = Source.View.SortDescriptions.ToList();
// Change source.
Source.Source = _collection2;
// This has to be done in order to maintain the sort order.
existingSortDescription.ForEach(Source.SortDescriptions.Add);
});
}
public CollectionViewSource Source { get; } = new CollectionViewSource();
private class Data
{
public Data(string name)
{
Name = name;
}
public string Name { get; }
}
上述代码的作用是,在应用程序启动时,首先使用
_collection1
作为数据网格中项源的来源。5秒后,将数据网格的项源更改为
_collection2
。如果运行上述代码,则当源更改为
_collection2
时,“名称”列标题中的排序方向箭头将消失,但排序仍然正确。这是否是WPF
DataGrid
控件中的错误,还是我在这里漏掉了什么?