Sort と Filter が AWOL になった今、Linq が推奨される方法のようです。
したがって、モデルに次のようなものを採用できます。
private MyDataSourceProvider dataSource;
private ObservableCollection<MyType> sortedDataBackingField;
public ObservableCollection<MyType> SortedData
{
get
{
return sortedDataBackingField;
}
set
{
sortedDataBackingField = value;
NotifyPropertyChanged("SortedData");
}
}
public void SortByName()
{
SortedData = new ObservableCollection<MyType>(dataSource.Entities.OrderBy(
entity => entity.Name));
}
public void SortByAge()
{
SortedData = new ObservableCollection<MyType>(dataSource.Entities.OrderBy(
entity => entity.Age));
}
選択したパターンで SortByName と SortByAge を UI にフックし、単に SortedData プロパティにバインドします。
<ItemsControl ItemsSource=”{Binding SortedData}”/>
編集:トランジションを参照すると、このアプローチは、並べ替えたアイテムの AddDeleteThemeTransition をトリガーすることがわかります。ItemsControl 内に次のようなものを追加するだけです。
<ItemsControl.ItemContainerTransitions>
<TransitionCollection>
<AddDeleteThemeTransition></AddDeleteThemeTransition>
</TransitionCollection>
</ItemsControl.ItemContainerTransitions>