SortDescription和自动排序顺序刷新

时间:2011-09-10 13:57:47

标签: c# wpf data-binding 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));

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

EDITED2

以下是Records

的源代码
public class Records : ObservableCollection<RecordItem>
{
    public Records() { }

}

这是'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)); } }

}

注意

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

2 个答案:

答案 0 :(得分:6)

看一下WPF博士的这篇文章:ItemsControl: 'E' is for Editable Collection

它可以帮助您解决问题。

答案 1 :(得分:1)

.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");

ModifiedTime更改时,此列表应重新排序。这样做还有一个好处,就是不会刷新整个视图!