1

我的 WinRT 应用程序中有一个使用自定义 ListView 的 ListView。根据 Microsoft 的建议,自定义 ListView 类只是覆盖 PrepareContainerForItemOverride() 以便我可以有交替的背景:

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 不可用。

我已经尝试在文档和网络上搜索替代方案,但我一直在偶然发现 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 回答