В зависимости от того, как часто вы ожидаете изменения данных в списке, я бы, вероятно, выбрал ICollectionView
экземпляров, как вы предлагаете.Однако вы не сможете использовать CollectionViewSource.GetDefaultView
для 3 отдельных свойств, поскольку каждый раз он будет возвращать один и тот же экземпляр объекта.Вместо этого вам нужно явно создать новые ICollectionView
s:
this.Property1 = new ListCollectionView(this.PersonRoles);
this.Property2 = new ListCollectionView(this.PersonRoles);
this.Property3 = new ListCollectionView(this.PersonRoles);
// then set up filters
В качестве альтернативы, если данные в списке будут меняться очень редко, лучше выполнить фильтрацию с помощью LINQ.когда вы фактически заполняете список и фактически сохраняете 3 коллекции:
this.Property1 = new ObservableCollection<PersonRole>(dataSource.Where(o => o.RoleID=1);
this.Property2 = new ObservableCollection<PersonRole>(dataSource.Where(o => o.RoleID=2);
//etc
Этот подход не особенно хорош, если вы ожидаете, что элементы будут добавляться и удаляться из общего списка с какой-либо регулярностью, поскольку это будетчто вам нужно постоянно синхронизировать все 3 списка.
В качестве заключительного комментария вы можете настроить представления коллекций в XAML, но вы не сможете отфильтровать их без некоторыхформа кода позади.