【问题标题】:SortDescription and automatic sorted order refreshSortDescription 和自动排序顺序刷新
【发布时间】:2011-11-14 09:24:13
【问题描述】:

当我修改绑定在列表框中的项目的值时,我希望排序顺序会自动更改。

但事实并非如此。

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

.Refresh() 不起作用。

已编辑

我是这样绑定和设置数据的;

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 类)中添加一个项目时,它运行良好。仅修改属性时出现问题。

【问题讨论】:

  • 你能展示你如何将数据绑定到 UI 控件吗?

标签: c# wpf data-binding view


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    .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 更改时,这应该重新排序列表。这样做的额外好处是不会刷新整个视图!

    【讨论】:

      猜你喜欢
      • 2012-06-07
      • 1970-01-01
      • 2012-04-19
      • 2015-09-29
      • 1970-01-01
      • 1970-01-01
      • 2010-11-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多