当我修改绑定在列表框中的项目的值时,我期望排序顺序应该自动更改。
但实际上并没有。
在这种情况下,我需要调用 .SortDescriptions.Clear() 方法并重新分配 SortDescription 吗?
.Refresh() 无效。 编辑 我是这样绑定和设置数据的;
当应用程序第一次启动时,它显示了正确的结果。但是当我修改项目的值(在这种情况下为“ModifiedTime”属性)时,视图没有更改。然后我重新启动了应用程序,它再次显示了正确的结果。
EDITED2: 这是
但实际上并没有。
在这种情况下,我需要调用 .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));
当应用程序第一次启动时,它显示了正确的结果。但是当我修改项目的值(在这种情况下为“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类)中添加一个项目时,它工作正常。只有修改属性时才会出现问题。