SortDescription和自动排序顺序刷新

mjk*_*026 5 c# data-binding wpf view

当我修改了在列表框中绑定的项目的值时,我预计排序的顺序应该自动更改.

但事实并非如此.

我是否调用.SortDescriptions.Clear()方法并在这种情况下重新分配SortDescription?

.Refresh()不起作用.

EDITED

我绑定并设置这样的数据;

public Records myRecents;


....

//lbToday is a ListBox.
//ModifiedTime is a DateTime.
this.lbToday.ItemsSource = new ListCollectionView(myRecents);
this.lbToday.Items.SortDescriptions.Add(new SortDescription("ModifiedTime", ListSortDirection.Descending));
Run Code Online (Sandbox Code Playgroud)

当应用程序第一次启动时,它显示正确的结果.但是当我修改item的值(在这种情况下,'ModifiedTime'属性)时,视图不会改变.我重新启动了应用程序,它再次显示了正确的结果.

EDITED2

这是一个源代码Records.

public class Records : ObservableCollection<RecordItem>
{
    public Records() { }

}
Run Code Online (Sandbox Code Playgroud)

这是'RecordItem'的源代码

public class RecordItem : INotifyPropertyChanged
{

    string queryString; public string QueryString { get { return queryString; } set { queryString = value; Notify("QueryString"); } }

    DateTime modifiedTime; public DateTime ModifiedTime { get { return modifiedTime; } set { modifiedTime = value; Notify("ModifiedTime"); } }


    public RecordItem() { }
    public RecordItem(string qStr)
    {
        this.queryString = qStr;
        this.modifiedTime = DateTime.Now;
    }

    public event PropertyChangedEventHandler PropertyChanged;
    protected void Notify(string propName) { if (this.PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(propName)); } }

}
Run Code Online (Sandbox Code Playgroud)

注意

当我在myRecents中添加一个项目(Record类)时,它运行良好.仅修改属性时出现问题.

LPL*_*LPL 6

看看WPF博士的这篇文章:ItemsControl:'E'代表可编辑的集合

它应该可以帮助您解决问题.


Sha*_*rot 6

.NET 4.5 向 ListCollectionView 添加了两个新属性,这是 ListBox 和 CollectionViewSource.View 的默认实现。

要对您的ModifiedTime财产进行实时排序,请将其添加到LiveSortingProperties并打开IsLiveSorting

list.SortDescriptions.Add(new SortDescription("ModifiedTime", ListSortDirection.Ascending));
list.IsLiveSorting = true;
list.LiveSortingProperties.Add("ModifiedTime");
Run Code Online (Sandbox Code Playgroud)

这应该在更改时重新对列表进行排序ModifiedTime。这样做的额外好处是不刷新整个视图!