WPF多个列表视图绑定到具有不同排序说明的同一集合

我有一个应用程序,允许用户创建包含绑定到自定义数据类型的ObservableCollection的列表视图的同一用户控件的多个实例.用户单击标题后,我的listview会正确排序,但是它将对绑定到ObservableCollection的所有视图进行排序.

我的问题是,是否有任何方法可以对独立于ObservableCollection的视图执行排序,还是有另一种方法来克隆ObservableCollection的内容(注意:ObservableCollection经常由后台的服务不断添加到该服务中,因此必须实时显示).

我对集合进行如下排序:

ICollectionView dataView = CollectionViewSource.GetDefaultView(sourceList.ItemsSource);
dataView.SortDescriptions.Clear();
SortDescription sd = new SortDescription(sortBy, direction);
dataView.SortDescriptions.Add(sd);

我的列表视图的项目来源设置如下:

myListView.ItemsSource = ServiceManager.Instance.ActiveObjects; 

我宁愿不维护同一ObservableCollection的多个实例.要求用户能够拥有该用户控件的多个实例,因此很遗憾,我无法轻松解决此问题并将它们限制为单个实例.

在这方面的任何帮助将不胜感激,在此先感谢.

解决方法:

您的错误是将ItemsSource属性直接设置为ServiceManager.Instance.ActiveObjects属性:

myListView.ItemsSource = ServiceManager.Instance.ActiveObjects; 

相反,您应该为每个ListView从数据集合创建一个单独的ICollectionView实例.该示例改编自以下链接的页面:

private ICollectionView _customerView;

public ICollectionView Customers
{
    get { return _customerView; }
}

public CustomerViewModel()
{
    IList<YourClass> customers = ServiceManager.Instance.ActiveObjects;
    _customerView = CollectionViewSource.GetDefaultView(customers);
}

<ListBox ItemsSource="{Binding Customers}" />

您可以从WPF Tutorial.NET网站的How to Navigate, Group, Sort and Filter Data in WPF页中找到更多详细信息.

上一篇:根据值索引和字母顺序对python字典进行排序


下一篇:修改php natcasesort,使“仅字母”优先