У меня есть ItemsControl, у которого ItemsSource связан с ObservableCollection <
Component> во время выполнения. Я определил шаблон данных для компонента типа, который работает нормально.
Теперь у компонента есть ObservableCollection <
Control>, и я хочу добавить еще один ItemsControl внутри моей таблицы данных компонента, чтобы отобразить все элементы управления. Элемент управления здесь - это мой собственный объект, не связанный с элементом управления wpf.
Существуют различные типы элементов управления, поэтому я пытаюсь использовать ItemTemplateSelector, чтобы выбрать правильный шаблон для каждого типа. В приведенном ниже примере, чтобы сохранить его небольшим, я показал только один из шаблонов «RWString», который я нахожу, используя FindResource в MyControlTemplateSelector, переопределяя SelectTemplate. Но SelectTemplate никогда не вызывается (используя точку останова для проверки). Что-то не так в моем xaml?
<ItemsControl.Resources>
<src:MyControlTemplateSelector x:Key="XSelector" />
<DataTemplate DataType="{x:Type src:Component}" >
<Expander Visibility="{Binding Path=Show}">
<ItemsControl ItemsSource="{Binding Path=Contrls}"
ItemTemplateSelector="{StaticResource XSelector}">
<ItemsControl.Resources>
<DataTemplate x:Key="RWstring" >
<TextBlock Text="{Binding Path=Label}"/>
</DataTemplate>
</ItemsControl.Resources>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate><WrapPanel /></ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</Expander>
</DataTemplate>
</ItemsControl.Resources>
Обновление: Contrls - это не опечатка, просто я использую систему глупых имен. Contrls - это свойство компонента типа ObservableCollection. Кроме того, причина, по которой я пытаюсь использовать ItemsTemplateSelector, заключается в том, что ObservableCollection <
Control> содержит объекты универсальных типов, таких как Control <
int> Control <
string> и т. Д., Все они получены из Control, и, очевидно, вы не можете создавать шаблоны данных, ссылающиеся на на общие типы.
Обновление 3: Удалено обновление 2, поскольку оно не было связано. Я получил ItemTemplateSelector для работы, изменив StaticResource на DynamicResource. Но я не знаю, почему это работает ...