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类)时,它运行良好.仅修改属性时出现问题.
.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
。这样做的额外好处是不刷新整个视图!
归档时间: |
|
查看次数: |
4241 次 |
最近记录: |