сортировка связанного ItemsControl в DataTemplate (только XAML)
существует ли единственный способ XAML автоматически сортировать связанные элементы (список объектов ViewModel) ItemsControl на основе одного из свойств элементов. ItemsControl является частью DataTemplate. Я думал, что CollectionViewSource сделает трюк, но как привязать CollectionViewSource к ItemsControl. Следующий код ничего не dispays:
<--xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase"-->
<DataTemplate DataType="{x:Type vm:Company}">
<DataTemplate.Resources>
<CollectionViewSource x:Key="viewSource" Source="{Binding Employees}">
<CollectionViewSource.SortDescriptions>
<scm:SortDescription PropertyName="ID" />
</CollectionViewSource.SortDescriptions>
</CollectionViewSource>
</DataTemplate.Resources>
<Viewbox>
<ItemsControl ItemsSource="{Binding Source={StaticResource viewSource}}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</Viewbox>
</DataTemplate>
2 ответов
попробуйте переместить CollectionViewSource
ресурс в область Viewbox
, а не непосредственно DataTemplate
:
<DataTemplate DataType="{x:Type vm:Company}">
<Viewbox>
<Viewbox.Resources>
<CollectionViewSource x:Key="viewSource" Source="{Binding Employees}">
<CollectionViewSource.SortDescriptions>
<scm:SortDescription PropertyName="ID" />
</CollectionViewSource.SortDescriptions>
</CollectionViewSource>
</Viewbox.Resources>
<ItemsControl ItemsSource="{Binding Source={StaticResource viewSource}}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</Viewbox>
</DataTemplate>
Я не использовал DataTemplate или ViewBox для этого. Порядок сортировки можно выбрать, указав ItemsControl.Ресурс....
<ItemsControl xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase"
x:Name="MyItemsControl" Loaded="MyItemsControl_Loaded">
<ItemsControl.ItemTemplate>
<DataTemplate>
<ItemsControl>
<ItemsControl.Resources>
<CollectionViewSource x:Key="Orders" Source="{Binding Orders}">
<CollectionViewSource.SortDescriptions>
<scm:SortDescription PropertyName="OrderID" Direction="Ascending"/>
</CollectionViewSource.SortDescriptions>
</CollectionViewSource>
</ItemsControl.Resources>
<ItemsControl.ItemsSource>
<Binding Source="{StaticResource Orders}"/>
</ItemsControl.ItemsSource>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding OrderID}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
удачи!