我有一个DataGrid,它的XAML列如下:
<DataGridTextColumn Header="Time" Binding="{Binding Date, StringFormat='yyyy-MM-dd HH:mm:ss'}" SortMemberPath="Date" SortDirection="Descending" Width="130" CanUserResize="True" />
<DataGridTextColumn Header="Level" Binding="{Binding Level}" Width="60" CanUserResize="True" />
<DataGridTextColumn Header="Source" Binding="{Binding Logger}" Width="150" CanUserResize="True" />
<DataGridTextColumn Header="Message" Binding="{Binding Message}" Width="*" CanUserResize="True" />
我将其绑定到一个ObservableCollection<EalsLogEvent>
,其中EalsLogEvent.Date
的类型为DateTime
:
public ObservableCollection<EalsLogEvent> LogEvents
{
get
{
return _logEvents;
}
}
网格视图模型使用定时器来刷新自身,在加载应用程序时,网格看起来一切正常,除了Time
列在首次加载时似乎是降序排序,但实际上是升序排序。
为了正确排序,我必须点击两次列标题;第一次将顺序更改为升序,这与列的内容匹配。第二次单击列标题会将其排序顺序返回到降序,并且这次它会正确地对列内容进行排序,即按降序排序。
如果我在_logEvents
刷新时使用LINQ对集合进行排序,则会失去用户通过单击标题设置的任何顺序。如果我必须让视图告诉模型LINQ排序应该使用哪个顺序,那么就有点糟糕了。
CollectionView
进行排序吗? - dymanoidDataGrid
应该维护自己的CollectionView
或其三个派生类之一。 - ProfKObservableCollection
是泛型类型而CollectionView
及其子类ListCollectionView
和BindingListCollectionView
都不是泛型类型时,我该如何将ObservableCollection
替换为任何一个CollectionView
或其子类? - ProfK