在Windows 8.1 GridView中不显示可见性为Collapsed的项。
在Windows 8.1 GridView中不显示可见性为Collapsed的项。
我有一个Windows 8.1应用程序,它有一个绑定到自定义(可排序,去重)可观察集合的GridView
。在这个集合中,我会进行一些重型过滤,并为每个项目设置一个IsHidden标志。
在项目的数据模板中,有一个条件,如果IsHidden标志设置为true,则使项目折叠。
这种方法在Windows Phone 8.1 XAML中可以使用,在ListView
中使项目消失,但在Windows 8.1 GridView
中不起作用。在Windows 8.1中的问题在于,当我将集合中的项目设置为隐藏时,它从GridView
中消失,但留下一个空位置,所以GridView
中存在一个空隙。
有什么解决方法吗?可能是同样的XAML样式编辑吗?
这里有一个最小的解决方案来重现问题:https://dl.dropboxusercontent.com/u/73642/gv.zip
我尝试了将项目的宽度和高度绑定到隐藏标志,并在隐藏项目时将其设置为0,但这没有帮助,GridView
中仍然存在一个空隙。
更新:一个解决方法是过滤实际绑定的集合,但由于业务需求,这是不可能的。
问题在于GridView
中的ItemsPanel
。 ItemsWrapGrid
和WrapGrid
都是统一的网格。它们的所有子元素都将共享相同的高度和宽度。这就是为什么即使你折叠了ItemTemplate
,空间仍然被保留的原因。\n\n你真正需要的是一个WrapPanel
。WINRT没有内置的WrapPanel
,但Jerry Nixon已经建立了一个,你可以从这里下载。\n\n在更新GridView
的ItemsPanel
之后,你还需要做的一件事是,你需要获取托管你ItemTemplate
的GridViewItem
并将其Visibility
设置为Collapsed
。\n\n
\n
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; }\n
\n\n我上面加了一点延迟,以使折叠更明显。