私の WP8 アプリでは、LongListSelector を使用してデータ項目を表示しています。グループ化が機能し、ジャンプ リストが機能します。
ここには通常のマスター/詳細シナリオがあります。リスト内のアイテムをクリックすると、新しいページが詳細情報とともに表示されます。
問題は、LongListSelector を使用してページに戻ることです。リストは基本的にめちゃくちゃです -グループ間であっても、アイテムはランダムに並べ替えられます。アイテムのクリックは正しく機能します -ShowItemInfo
ユーザーがクリックしたアイテムのビュー モデルを受け取ります。
以前は ListBox を使用していましたが、これもこの問題に悩まされていました。しかし、デフォルトの StackPanel を項目パネルとして使用することで、仮想化を無効にすることができました。LongListSelector で仮想化を無効にする方法がわかりません (そうしたくありませんが、バグがひどいです)。
ビューモデルはシンプルです。私はCaliburn.Micro、その規則、およびBindableCollection
グループのリストを使用しています。メソッドを使用してリストに一度だけ入力しますAddRange
。
ページに戻ったとき、私は何もしていません。MVVM と Caliburn.Micro を使用しているので、何もできません。アイテムはOnInitialize
コールバックでリストにロードされます。これは、ビュー モデルの有効期間中に 1 回だけ呼び出されます。
ビューの XAML は次のとおりです。
<Grid x:Name="LayoutRoot" Background="Transparent">
<Grid.Resources>
<phone:JumpListItemBackgroundConverter x:Key="BackgroundConverter"/>
<phone:JumpListItemForegroundConverter x:Key="ForegroundConverter"/>
<Style x:Key="ListJumpListStyle" TargetType="phone:LongListSelector">
<Setter Property="ItemTemplate">
<Setter.Value>
<DataTemplate>
<Border Background="{Binding Converter={StaticResource BackgroundConverter}}"
HorizontalAlignment="Stretch">
<TextBlock Text="{Binding GroupTitle}"
Foreground="{Binding Converter={StaticResource ForegroundConverter}}" />
</Border>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</Grid.Resources>
<phone:LongListSelector x:Name="Items" LayoutMode="List" IsGroupingEnabled="True"
JumpListStyle="{StaticResource ListJumpListStyle}">
<phone:LongListSelector.ItemTemplate>
<DataTemplate>
<Grid cal:Bind.Model="{Binding}"
cal:Message.Attach="[Event Tap] = [ShowItemInfo($dataContext)]"
Background="Transparent">
<TextBlock x:Name="ItemText" Style="{StaticResource PhoneTextTitle2Style}" />
</Grid>
</DataTemplate>
</phone:LongListSelector.ItemTemplate>
<phone:LongListSelector.GroupHeaderTemplate>
<DataTemplate>
<Border>
<TextBlock Text="{Binding GroupTitle}" />
</Border>
</DataTemplate>
</phone:LongListSelector.GroupHeaderTemplate>
</phone:LongListSelector>
</Grid>