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ハンドラー以外には何もありません。これは、問題とは何の関係もないと思います。