У меня есть ListBox, который с радостью отображает данные, используя объект MVVM с выделенным кодом. Тем не менее, я хочу отсортировать записи, и поэтому я подумал, что промежуточный CollectionViewSource может работать. Но вместо этого программа вылетает при запуске.
Оригинальный экстракт xaml:
<ListBox SelectedItem="{Binding SelectedCategory}"
DisplayMemberPath="name"
ItemsSource="{Binding Categories}"
Name="CategoriesListBox" />
Код для извлечения:
public class ViewModel : INotifyPropertyChanged
{
private trainCategory[] _categories;
private trainCategory _selectedCategory;
public event PropertyChangedEventHandler PropertyChanged;
public trainCategory[] Categories
{
get { return _categories; }
set
{
if (_categories == value)
{
return;
}
_categories = value;
RaisePropertyChanged("Categories");
}
} //etc
Замена XAML для ListBox:
<ListBox SelectedItem="{Binding SelectedCategory}"
DisplayMemberPath="name"
ItemsSource="{Binding Source={StaticResource SortedItems}}"
Name="CategoriesListBox" />
И CollectionViewSource:
<CollectionViewSource x:Key="SortedItems" Source="{Binding Categories}">
<CollectionViewSource.SortDescriptions>
<scm:SortDescription PropertyName="name"/>
</CollectionViewSource.SortDescriptions>
</CollectionViewSource>
Мне кажется, что CollectionViewSource находится между моделью представления и ListBox, но это явно не так (или я сделал это неправильно). Любые указатели приветствуются.