0

ListViewサーバーからロードしているデータを表示する必要があるアプリがあります。

アイテムにカーソルを合わせる 選択したアイテム

ListViewには、テンプレートセレクターで選択される2つのItemTemplates(およびImageコントロール、TextBlocks、Grid、Stackpanel)があります。データ自体は正しく読み込まれますが、アプリの最初の起動時にコントロールに表示されませんが、常にそうであるとは限りません。正しく表示される場合と表示されない場合があります。アイテムが表示されていないリストビューをスクロールすると、アイテムが正しく表示されます。ここでの私の質問は、この動作を引き起こす可能性があるものは何ですか?

編集:わかりました、これが私のコードです

ListView:_

<customControls:MyListView 
        x:Name="EventListView" 
        ItemsSource="{Binding Events}"
        ItemTemplate="{StaticResource EventListSelectingTemplate}"
        Grid.Column="0" 
        Grid.Row="1"
        SelectedItem="{Binding SelectedItem, Mode=TwoWay}"
        ItemContainerStyle="{StaticResource EventListViewItemDisabledStyleModified}"
        SelectionChanged="EventListView_OnSelectionChanged"/>

このような問題が発生したため、リストビューコントロールを編集しました。通常を使用するListView場合でも、デフォルトを使用する場合でも、変更はありませんItemContainerStyle

これが別のファイルにあるテンプレートですEventListHeaderTemplate。アイテムのisTournamentプロパティがtrueの場合に選択されます(これがアイテムをグループ化する私の方法です)。これは原始的な方法です。CollectionViewSourceを使用してアイテムをグループ化し、これが問題であったかどうかを確認します。

<DataTemplate x:Key="EventListItemTemplate">
    <Grid Width="{Binding ElementName=EventListView, Path=ActualWidth}" Margin="3">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="1*"/>
            <ColumnDefinition Width="3*"/>
            <ColumnDefinition Width="1*"/>
        </Grid.ColumnDefinitions>
        <StackPanel 
            x:Name="timeAndStatus" 
            Grid.Column="0"
            Orientation="Vertical">
            <TextBlock 
                x:Name="time" 
                Text="{Binding GameStartTime}" 
                Visibility ="{Binding St, Converter={StaticResource StatusToVisibilityConverter}}"
                HorizontalAlignment="Center" />

            <Image 
                x:Name="liveEventImage" 
                Width="16"
                Height="16"
                Source="{StaticResource LiveIcon}"
                Visibility="{Binding ElementName=time, Path=Visibility, Converter={StaticResource VisibilityNegationConverter}}"
                HorizontalAlignment="Center"
                Margin="0,0,0,5"/>

            <TextBlock 
                x:Name="status" 
                Text="{Binding Status}" 
                HorizontalAlignment="Center"/>
        </StackPanel>
        <StackPanel 
            x:Name="teamNames" 
            Grid.Column="1"
            Orientation="Vertical">
            <StackPanel Orientation="Horizontal">
                <TextBlock 
                    x:Name="homeTeamName" 
                    Text="{Binding Ht}"
                    FontWeight="{Binding Converter={StaticResource EventToFontWeightConverter}, ConverterParameter=HOME}"/>
                <StackPanel Orientation="Horizontal" Margin="20,0,0,0">
                    <Image Source="../Assets/Images/red.png" Visibility="{Binding Ca, Converter={StaticResource NumberOfRedsToImageVisibilityConverter}, ConverterParameter='H1'}"/>
                    <Image Source="../Assets/Images/red.png" Visibility="{Binding Ca, Converter={StaticResource NumberOfRedsToImageVisibilityConverter}, ConverterParameter='H2'}" Margin="10,0,0,0"/>
                    <Image Source="../Assets/Images/red.png" Visibility="{Binding Ca, Converter={StaticResource NumberOfRedsToImageVisibilityConverter}, ConverterParameter='H3'}" Margin="10,0,0,0"/>
                </StackPanel>
            </StackPanel>
            <StackPanel Orientation="Horizontal">
                <TextBlock 
                    x:Name="awayTeamName" 
                    Text="{Binding At}" 
                    FontWeight="{Binding Converter={StaticResource EventToFontWeightConverter}, ConverterParameter=AWAY}"/>
                <StackPanel Orientation="Horizontal" Margin="20,0,0,0">
                    <Image Source="../Assets/Images/red.png" Visibility="{Binding Ca, Converter={StaticResource NumberOfRedsToImageVisibilityConverter}, ConverterParameter='A1'}"/>
                    <Image Source="../Assets/Images/red.png" Visibility="{Binding Ca, Converter={StaticResource NumberOfRedsToImageVisibilityConverter}, ConverterParameter='A2'}" Margin="10,0,0,0"/>
                    <Image Source="../Assets/Images/red.png" Visibility="{Binding Ca, Converter={StaticResource NumberOfRedsToImageVisibilityConverter}, ConverterParameter='A3'}" Margin="10,0,0,0"/>
                </StackPanel>
            </StackPanel>
        </StackPanel>
        <StackPanel 
            x:Name="teamScores" 
            Grid.Column="2"
            Orientation="Vertical">
            <TextBlock 
                x:Name="homeScore" 
                Text="{Binding Hs}" />
            <TextBlock 
                x:Name="awayScore" 
                Text="{Binding As}" />
        </StackPanel>
    </Grid>
</DataTemplate>

<DataTemplate x:Key="EventListHeaderTemplate">
    <Grid 
        Background="Gray" 
        Width="{Binding ElementName=EventListView, Path=ActualWidth}"
        Height="50"
        Margin="0,20,0,0">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="1*"/>
            <ColumnDefinition Width="4*"/>
        </Grid.ColumnDefinitions>
        <Image 
            x:Name="CountryFlag"
            Grid.Column="0"
            Source="{Binding FlagUrl}"
            Width="40"
            Height="30"/>
        <TextBlock
            Grid.Column="1"
            Text="{Binding TournamentSignature}" 
            FontSize="18" 
            MaxHeight="50"
            VerticalAlignment="Center"
            Padding="0,0,20,0"
            TextWrapping="Wrap"/>
    </Grid>
</DataTemplate>

<DataTemplate x:Key="EventListSelectingTemplate">
    <templateHandling:EventListTemplateSelector Content="{Binding}"
                                EventListItemTemplate="{StaticResource EventListItemTemplate}"
                                EventListHeaderTemplate="{StaticResource EventListHeaderTemplate}"
                                />
</DataTemplate>

最初に画像が問題であると教えましたが、テンプレートから画像を削除しても問題は解決しません。

およびTemplateSelector:

public DataTemplate EventListItemTemplate { get; set; }
    public DataTemplate EventListHeaderTemplate { get; set; }

    public override DataTemplate SelectTemplate(object item, DependencyObject container)
    {
        var ev = item as Event;
        if (ev != null)
        {
            if (ev.IsTournament)
            {
                return EventListHeaderTemplate;
            }
            else
            {
                return EventListItemTemplate;
            }
        }
        return null;
    }

このリストビューのコードには、SelectionChangedハンドラー以外には何もありません。これは、問題とは何の関係もないと思います。

4

0 に答える 0