我有一个应用程序,允许用户创建包含绑定到自定义数据类型的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页中找到更多详细信息.