2

私は単純な DataTempleSelector を WPF Listbox に使用しようとしましたが、うまくいきませんでした。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>
4

1 に答える 1

1

ListBoxコントロール内の項目の UI を次のようにハードコーディングしました。ListBoxItems

を使用する場合は、のプロパティItemTemplateを使用する必要があります。その後、DataTemplate が各項目に適用されます。ItemsSourceListBox

すなわち

<ListBox ItemTemplateSelector="{StaticResource templateSelector}" ItemsSource="{Binding Fruits}">
</ListBox>
于 2015-08-04T14:14:25.050 に答える