文字列をListBox
で並べ替える必要がありますが、DataContext
を介して別のコンポーネントによってビューモデルにバインドされています。そのため、ObjectDataProvider
を使用する この例 のように、XAMLでビューモデルを直接インスタンス化することはできません。
私のXAMLで:
<ListBox ItemsSource="{Binding CollectionOfStrings}" />
私のビューモデルでは:
public ObservableCollection<string> CollectionOfStrings
{
get { return collectionOfStrings; }
}
別のコンポーネントでは:
view.DataContext = new ViewModel();
背後にコードはありません!では、純粋にXAMLを使用して、ListBoxの項目をどのように並べ替えればよいでしょうか。ここでも、XAMLはビューモデルのインスタンス化を所有していません。
CollectionViewSource
を使用します:
<CollectionViewSource x:Key="SortedItems" Source="{Binding CollectionOfStrings}"
xmlns:scm="clr-namespace:System.ComponentModel;Assembly=WindowsBase">
<CollectionViewSource.SortDescriptions>
<scm:SortDescription PropertyName="SomePropertyOnYourItems"/>
</CollectionViewSource.SortDescriptions>
</CollectionViewSource>
<ListBox ItemsSource="{Binding Source={StaticResource SortedItems}}"/>
文字列をカスタムのVM=クラスでラップすると、並べ替え動作をより簡単に適用できます。