1

WinRTアプリケーションでカスタムListViewを使用するListViewがあります。カスタムListViewクラスは、PrepareContainerForItemOverride()をオーバーライドするだけなので、このMicrosoftの提案に従って、背景を交互に設定できます。

http://msdn.microsoft.com/en-us/library/ms750769%28v=VS.85%29.aspx

そこに記載されているように、アイテムがリストから削除されても、代替の背景は自動的に更新されません。これに対する解決策を提供します:

ICollectionView dataView =
  CollectionViewSource.GetDefaultView(theListView.ItemsSource);
dataView.Refresh();

ただし、CollectionViewSource.GetDefaultViewはSystem.Windows.Dataにあり、WinRTでは使用できません。

ドキュメントとWebで別の方法を検索しようとしましたが、WPFコードに出くわし続けています。データを更新する方法が見つかりません。現時点で思いつくのは、すべてのデータを削除して再度追加することだけです。これは明らかに気が狂っています。

4

1 に答える 1

0

簡単な「解決策」が得られたので、ここに含めたいと思いました。

App.xaml.csに以下を追加しました。

OnLaunchedでは、最後に、次のようになります。

Window.Current.Activate();

追加した

Window.Current.VisibilityChanged += ForceListUpdate;

ForceListUpdateは次のとおりです。

private void ForceListUpdate(object sender, ICoreWindowEventArgs e)
{
    if (!Window.Current.Visible)
    {
        DataSource.ForceListUpdate();
    }
}

およびDataSource.ForceListUpdateは次のとおりです。

public static void ForceListUpdate()
{
    if (_dataSource.Content.Count != 0)
        _dataSource.Content.Move(0, 0);
}

削除中にアニメーションを無効にすることでさまざまなことをしましたが、それはかなり醜いものでした。この方法では、アイテムが削除されると、交互の色が一致しなくなります。ウィンドウが表示されなくなるまで、ウィンドウが更新されます。これは、私が見つけた中で最も優れたソリューションです。

于 2013-02-17T14:07:26.820 に答える