4

ListViewいくつかのアイテムを選択してアプリバーを表示し、[お気に入りから削除] をクリックして、アイテムを削除できる (お気に入りのリスト) を作成しています。ボタンがクリックされると、現在のビュー モデルのメソッドは、このアイテムをリストから削除するよう求められます。これが発生すると、UI が更新され、アイテムが削除されます。

今、私には2つの問題があります。1つ目は、アイテムが削除されたときにページの戻るボタンがフォーカスを受け取ることです(点線のアウトラインが表示されます)。これは望ましくありません。

2 番目の問題は、使用するように設定した追加/削除アニメーションがリストで使用されないことです。

これらのいずれかに対する解決策をいただければ幸いです。

何が起こるかを示す擬似コードを次に示します。

XAML:

<GridView x:Name="FavoritesGridView"
    Grid.Row="1"
    SelectionMode="Multiple"
    ItemTemplate="{StaticResource FavoritesOnSectionViewItemTemplate}"
    ItemsSource="{Binding FavoritesList}" 
    ItemClick="ProgramGrid_OnItemClick" 
    IsItemClickEnabled="True"
    SelectionChanged="FavoritesGridView_OnSelectionChanged"
    ScrollViewer.HorizontalScrollMode="Disabled">
    <GridView.ItemContainerStyle>
      <Style TargetType="Control">
        <Setter Property="Margin" Value="0,0,38,8"/>
      </Style>
    </GridView.ItemContainerStyle>
    <GridView.ItemContainerTransitions>
      <TransitionCollection>
        <AddDeleteThemeTransition/>
      </TransitionCollection>
    </GridView.ItemContainerTransitions>
    <GridView.ItemsPanel>
      <ItemsPanelTemplate>
        <WrapGrid Orientation="Vertical" MaximumRowsOrColumns="9" />
      </ItemsPanelTemplate>
    </GridView.ItemsPanel>
</GridView>

コードビハインド:

private void UnFavoriteButton_Click(object sender, RoutedEventArgs e)
{          
    viewModel.RemoveFromFavorites(FavoritesGridView.SelectedItems.Cast<FavoriteProgram>().AsEnumerable());
}

ビューモデル:

public void RemoveFromFavorites(IEnumerable<FavoriteProgram> programs)
{
    FavoriteController.RemoveFromFavorites(programs);
    UpdateUi();
}

private void UpdateUi()
{
    OnPropertyChanged("FavoritesList");
}

public IEnumerable<FavoriteProgram> FavoritesList
{
    get { return CoreData.TvFavorites; } // A centralized list
}

お気に入りコントローラー:

public static void RemoveFromFavorites(IEnumerable<FavoriteProgram> programs)
{
    if (programs.IsNullOrEmpty()) return;
    foreach (var program in programs)
        RemoveFromFavorites(program);
}

public static void RemoveFromFavorites(FavoriteProgram program)
{
    if (!IsFavorite(program)) return;

    var list = CoreData.TvFavorites.ToList();
    list.Remove(program);
    CoreData.TvFavorites = list.AsEnumerable();
}

何か案は?

4

2 に答える 2