DataTempleSelector не вызывает SelectTemplate
Я пытался получить простой DataTempleSelector для моего списка WPF, и мне не повезло. У меня установлена точка останова на шаблоне SelectTemplate, и он никогда не вызывается. Есть идеи, что я здесь делаю не так?
C#:
public class ListBoxTemplateSelector : DataTemplateSelector
{
public DataTemplate DefaultnDataTemplate { get; set; }
public DataTemplate OverrideDataTemplate { get; set; }
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
string listboxItem = item as string;
if (listboxItem == "Apples" || listboxItem == "Oranges")
{
return OverrideDataTemplate;
}
return DefaultnDataTemplate;
}
}
XAML:
<Window.Resources>
<DataTemplate x:Key="DefaultDataTemplate">
<Grid Margin="4" MinHeight="25" Background="Blue"/>
</DataTemplate>
<DataTemplate x:Key="OverrideDataTemplate">
<Grid Margin="4" MinHeight="25" Background="Black"/>
</DataTemplate>
<converters:ListBoxTemplateSelector
x:Key="templateSelector"
DefaultnDataTemplate="{StaticResource DefaultDataTemplate}"
OverrideDataTemplate="{StaticResource OverrideDataTemplate}"/>
</Window.Resources>
<Grid>
<ListBox ItemTemplateSelector="{StaticResource templateSelector}">
<ListBox.Items>
<ListBoxItem Content="Apple"/>
<ListBoxItem Content="Banannas"/>
<ListBoxItem Content="Oranges"/>
<ListBoxItem Content="Lemons"/>
</ListBox.Items>
</ListBox>
</Grid>
1 ответ
Решение
Вы жестко запрограммировали пользовательский интерфейс элементов в ListBox
контролировать как ListBoxItems
Если вы хотите использовать ItemTemplate
вам придется использовать ItemsSource
собственность ListBox
тогда ваш DataTemplate будет применен к каждому элементу.
т.е.
<ListBox ItemTemplateSelector="{StaticResource templateSelector}" ItemsSource="{Binding Fruits}">
</ListBox>