2

ItemTemplates現在の Item タイプにListView基づいて2 つを切り替えるために、 を実装しましたDataTemplateSelector。経由で追加しBindingましたListView。しかし、ブレークポイントを設定すると、呼び出されません。私はすべてを試しましたが、何も機能しません。

public class ListViewTemplateSelector : DataTemplateSelector
{
    public DataTemplate SectionTemplate { get; set; }
    public DataTemplate EntryTemplate { get; set; }

    public override DataTemplate SelectTemplate(object item, DependencyObject container)
    {
        if (item is Section)
        {
            return SectionTemplate;
        }

        if (item is Entry)
        {
            return EntryTemplate;
        }

        return base.SelectTemplate(item, container);
    }
}

XAML:

<ListView DataContext="{Binding ElementName=This}" x:Name="list" Margin="200,25,0,0" ItemsSource="{Binding CurrentSelection}" ItemTemplateSelector="{StaticResource TemplateSelector}">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="ID" DisplayMemberBinding="{Binding ID}" Width="100" />
            <GridViewColumn Header="Value" DisplayMemberBinding="{Binding Value}" Width="300" />
        </GridView>
    </ListView.View>
</ListView>

<DataTemplate x:Key="sectionTemplate">
    <StackPanel Orientation="Horizontal">
        <Image Width="16" Height="16" Source="\Icons\blue-folder.png" />
        <TextBlock Text="{Binding ID}" Margin="5,0,0,0" />
    </StackPanel>
</DataTemplate>

<DataTemplate x:Key="entryTemplate">
    <StackPanel Orientation="Horizontal">
        <Image Width="16" Height="16" Source="\Icons\ui-text-field-medium.png" />
        <TextBlock Text="{Binding ID}" Margin="5,0,0,0" />
    </StackPanel>
</DataTemplate>

<sdk:ListViewTemplateSelector x:Key="TemplateSelector" SectionTemplate="{StaticResource sectionTemplate}" EntryTemplate="{StaticResource entryTemplate}" />

誰かがそれを修正する方法を知っていますか?

ありがとうR

4

1 に答える 1

3

GridView の概要 > GridView のレイアウトとスタイル> GridView の列の定義とスタイル設定から:

GridViewColumn に表示するデータ フィールドを定義するときは、DisplayMemberBinding、CellTemplate、または CellTemplateSelector プロパティを使用します。DisplayMemberBinding プロパティは、いずれのテンプレート プロパティよりも優先されます。

したがってDisplayMemberBinding、GridViewColumns からを削除しCellTemplateSelector、ListView の代わりに を設定する必要がありItemTemplateSelectorます。

<GridView>
    <GridViewColumn Header="ID" Width="100"
                    CellTemplateSelector="{StaticResource TemplateSelector}"/>
    <GridViewColumn Header="Value" Width="300"
                    DisplayMemberBinding="{Binding Value}"/>
</GridView>
于 2013-06-02T08:06:28.660 に答える