在Windows 8.1 GridView中未显示Visibility = Collapsed的项目

Igo*_*man 10 c# xaml windows-runtime winrt-xaml windows-8.1

我有一个Windows 8.1应用程序GridView绑定到自定义(可排序,重复数据删除)可观察集合.在这个集合中,我做了一些重过滤并为每个项目设置了一个IsHidden标志.

在项目的数据模板中,如果IsHidden标志设置为true,则存在使项目折叠的条件.

<Grid Width="160" Height="280" Visibility="{Binding IsHidden, Converter={StaticResource InvertedBooleanToVisibilityConverter}}">
Run Code Online (Sandbox Code Playgroud)

此方法适用于Windows Phone 8.1 XAML,使项目从该项中消失,ListView但在Windows 8.1中不起作用GridView.Windows 8.1的问题在于,当我将集合中的项目设置为隐藏时,id会从中消失,GridView但会留下一个空位,因此存在间隙GridView.

在此输入图像描述

关于如何解决它的任何想法?也许相同的XAML风格编辑?

以下是重现问题的最小解决方案:https://dl.dropboxusercontent.com/u/73642/gv.zip

我尝试将项目的宽度和高度绑定到隐藏标志,并在隐藏项目时将其设置为0,但它没有帮助,仍然是一个空白GridView.

更新:一种解决方法是过滤实际的绑定集合,但由于某些业务需求,这是不可能的.

Jus*_* XL 5

问题是在GridView的ItemsPanel.

这两个ItemsWrapGrid和WrapGrid均匀网格.他们所有的子元素将共享相同的高度和宽度.这就是为什么即使你崩溃了ItemTemplate,空间仍然是保留的.

你真正需要的是一个WrapPanel.WINRT没有内置WrapPanel但Jerry Nixon已经构建了一个,你可以从这里获取它.

更新完GridViews后ItemsPanel,还有一件事要做.您还需要获取GridViewItem托管您的主机Itemtemplate并将其设置Visibility为Collapsed.

    private async void Button_Click(object sender, RoutedEventArgs e)
    {
        ds[5].IsHidden = true;

        await Task.Delay(1000);
        var gridViewItem =(GridViewItem)this.gv.ContainerFromIndex(5);
        gridViewItem.Visibility = Visibility.Collapsed;
    }
Run Code Online (Sandbox Code Playgroud)

我稍微延迟一点,使崩溃更加明显.