Данные проектирования XAML и StaticResources / CollectionViews
Я использую данные XAML времени разработки уже несколько недель, и, кажется, работает нормально, за исключением некоторых случаев, например, текущего, в котором я хочу, чтобы окно списка отображало элементы, основанные на представлении коллекции, объявленном как ресурс.
В основном я хочу отобразить список "вещей", сгруппированных по категориям.
public class Thing
{
public string Category { get; set; }
public string Name { get; set; }
}
А потом я выставляю это через фиктивный класс ListOfThings
public class ListOfThings
{
public string ListName { get; set; }
public ObservableCollection<Thing> Things { get; set; }
}
У меня есть фиктивный файл XAML для данных следующим образом (XMLFile1.xaml)
<local:ListOfThings xmlns:local="clr-namespace:ListBoxGroupExample"
ListName="TheListOfThings">
<local:ListOfThings.Things>
<local:Thing Name="Item1" Category="Catagory1" />
<local:Thing Name="Item2" Category="Catagory1" />
<local:Thing Name="Item3" Category="Catagory2" />
</local:ListOfThings.Things>
В окне у меня есть список со стилем группы для расширителя для каждой группы
<Window x:Class="ListBoxGroupExample.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:ListBoxGroupExample"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
Title="MainWindow"
Width="525"
Height="350"
d:DataContext="{d:DesignData Source=/DesignData/XMLFile1.xaml}"
mc:Ignorable="d">
<Window.Resources>
<CollectionViewSource x:Key="GroupedData" Source="{Binding Path=Things}">
<CollectionViewSource.GroupDescriptions>
<PropertyGroupDescription PropertyName="Category" />
</CollectionViewSource.GroupDescriptions>
</CollectionViewSource>
</Window.Resources>
<Grid>
<StackPanel>
<ListBox ItemsSource="{Binding Source={StaticResource GroupedData}}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Name}" />
</DataTemplate>
</ListBox.ItemTemplate>
<ListBox.GroupStyle>
<GroupStyle>
<GroupStyle.ContainerStyle>
<Style TargetType="{x:Type GroupItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GroupItem}">
<Expander IsExpanded="True">
<Expander.Header>
<TextBlock FontWeight="Bold" Text="{Binding Path=Name}" />
</Expander.Header>
<ItemsPresenter Margin="5,0,0,0" />
</Expander>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</GroupStyle.ContainerStyle>
</GroupStyle>
</ListBox.GroupStyle>
</ListBox>
</StackPanel>
</Grid>
Это работает во время выполнения (я создаю экземпляр ListOfThings, заполняю коллекцию Observable, чтобы иметь ту же структуру, что и данные проекта XAML), но во время разработки я ничего не получаю.
Если я изменю ItemSource на прямую привязку к ObservableCollection of Things, а не к представлению коллекции, это будет работать, но, конечно, я не получу группировки.
ItemsSource="{Binding Path=Things}"
Я неправильно понимаю что-то со статическими ресурсами в том смысле, что они недоступны во время разработки? Следовательно, почему привязка к коллекционному представлению не отображается?
Или синтаксис привязки к источнику неверен?