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.
更新:一种解决方法是过滤实际的绑定集合,但由于某些业务需求,这是不可能的.
问题是在GridView的ItemsPanel.
这两个ItemsWrapGrid和WrapGrid均匀网格.他们所有的子元素将共享相同的高度和宽度.这就是为什么即使你崩溃了ItemTemplate,空间仍然是保留的.
你真正需要的是一个WrapPanel.WINRT没有内置WrapPanel但Jerry Nixon已经构建了一个,你可以从这里获取它.
更新完GridViews后ItemsPanel,还有一件事要做.您还需要获取GridViewItem托管您的主机Itemtemplate并将其设置Visibility为Collapsed.
Run Code Online (Sandbox Code Playgroud)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; }
我稍微延迟一点,使崩溃更加明显.
| 归档时间: |
|
| 查看次数: |
2132 次 |
| 最近记录: |