you can code it all in your view model
// in your view model private void ChangeSorting () { var collView = CollectionViewSource.GetDefaultView(ListValues); collView.SortDescriptions.Clear(); // do this one collView.SortDescriptions.Add(new SortDescription("YourPropertyName", ListSortDirection.Ascending)); // or this one collView.SortDescriptions.Add(new SortDescription("YourOtherPropertyName", ListSortDirection.Descending)); collView.Refresh(); } public ICollectionView ListValuesCollectionViewSource { get { return collView; } } <ListView ItemsSource="{Binding viewModel.ListValuesCollectionViewSource}" />
EDIT
here is a small example for your view model
<ComboBox ItemsSource="{Binding viewmodel.YourDataForComboboxCollection, Mode=OneWay}" SelectedItem="{Binding viewmodel.SelectedCombobox}" />
little viewmodel
using System.Collections.ObjectModel; using System.ComponentModel; using System.Windows; using System.Windows.Data; namespace YourNameSpace { public class ViewModel : INotifyPropertyChanged { public static readonly DependencyProperty SelectedComboboxProperty = DependencyProperty.Register("SelectedCombobox", typeof(YourDataForCombobox), typeof(ViewModel), new PropertyMetadata(default(YourDataForCombobox), new PropertyChangedCallback(SelectedComboboxCallback))); private static void SelectedComboboxCallback(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs e) { var vm = sender as ViewModel; if (vm != null && e.NewValue != null && e.NewValue != e.OldValue) { vm.ChangeSorting(e.NewValue); } } public ViewModel() { this.YourDataForComboboxCollection = new ObservableCollection<YourDataForCombobox>(); } private void ChangeSorting(YourDataForCombobox newValue) { this.yourCollectionView.SortDescriptions.Clear(); this.yourCollectionView.SortDescriptions.Add(new SortDescription(newValue.PropertyName, newValue.Sorting)); this.yourCollectionView.Refresh(); } private IObservableCollection yourDataForComboboxCollection; public IObservableCollection YourDataForComboboxCollection { get { return this.yourDataForComboboxCollection; } set { this.yourDataForComboboxCollection = value; this.RaisePropertyChanged("YourDataForComboboxCollection"); } } public YourDataForCombobox SelectedCombobox { get { return (YourDataForCombobox)GetValue(SelectedComboboxProperty); } set { SetValue(SelectedComboboxProperty, value); } } private IObservableCollection yourCollection; private ICollectionView yourCollectionView; public ICollectionView YourCollectionView { get { return this.GetCollectionView(); } } private ICollectionView GetCollectionView() { if (this.yourCollection == null) { this.yourCollection = new ObservableCollection<YourDataForCollection>(); this.yourCollectionView = CollectionViewSource.GetDefaultView(this.yourCollection);
hope this helps
source share