我有一个应用程序,它允许用户创建同一用户控件的多个实例,该控件包含一个绑定(bind)到自定义数据类型的 ObservableCollection 的 ListView 。在用户单击标题时,我对 ListView 进行了正确排序,但是它对绑定(bind)到 ObservableCollection 的所有 View 进行了排序。
我的问题是,是否有任何方法可以在与 ObservableCollection 分开的 View 上实现排序,或者是否有另一种方法来克隆 ObservableCollection 的内容(注意:ObservableCollection 不断地被后台服务添加到必须实时显示)。
我正在对集合进行如下排序:
ICollectionView dataView = CollectionViewSource.GetDefaultView(sourceList.ItemsSource);
dataView.SortDescriptions.Clear();
SortDescription sd = new SortDescription(sortBy, direction);
dataView.SortDescriptions.Add(sd);
我的 ListView 的项目源设置如下:
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}" />
您可以从 How to Navigate, Group, Sort and Filter Data in WPF 中找到更多详细信息WPF Tutorial.NET 网站上的页面。
关于c# - Wpf 多个 ListView 绑定(bind)到具有不同排序描述的同一集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25865936/