通过在Windows应用商店中绑定隐藏列表视图的组标头



我正在尝试删除标题为空的组的组标题。但我无法使HeaderContainerStyle中的绑定工作。我也不能在TemplateHeader中的TextBlock上设置可见性,因为这会留下一个小空间,并且不会完全不可见。

这是我的XAML:

<Page.Resources>
    <CollectionViewSource 
        x:Name="MenuItemsGrouped" 
        IsSourceGrouped="True"
        Source="{Binding MenuItems}" />
</Page.Resources>
<ListView Grid.Row="1" Margin="0"
            ItemsSource="{Binding Source={StaticResource MenuItemsGrouped}}"
            IsSynchronizedWithCurrentItem="False"
            SelectionMode="Single"
            SelectedItem="{Binding SelectedItem, Mode=TwoWay}">
    <ListView.GroupStyle>
        <GroupStyle>
            <GroupStyle.HeaderTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Title}" />
                </DataTemplate>
            </GroupStyle.HeaderTemplate>
            <GroupStyle.HeaderContainerStyle>
                <Style TargetType="ListViewHeaderItem">
                    <Setter Property="Visibility" Value="{Binding GroupHeaderVisibility}"></Setter>
                </Style>
            </GroupStyle.HeaderContainerStyle>
        </GroupStyle>
    </ListView.GroupStyle>
    <ListView.ItemTemplate>
        <DataTemplate>
            <StackPanel Margin="0" Orientation="Horizontal">
                <TextBlock Text="{Binding Title}" />
            </StackPanel>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

有人有解决方案吗?也许还有绑定不起作用的原因?

编辑:

好吧,这实际上是Windows应用商店应用程序和早期Silverlight应用程序的限制:

Windows Presentation Foundation(WPF(和Microsoft Silverlight支持使用Binding表达式提供Value对于一种风格的设定者。Windows运行时不支持绑定Setter.Value的用法(绑定不会求值,Setter具有没有效果,你不会出错,但你不会得到想要的结果或者(。从WPF或Silverlight XAML转换XAML样式时,将任何Binding表达式用法替换为字符串或对象值,或者将这些值重构为共享的StaticResource值比Binding获得的值大。

来自http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.setter

另请参阅Silverlight:如何在setter中为样式(或等效的解决方案(使用绑定

只需尝试绑定HeaderTemplate根元素的Visibility即可。

    <GroupStyle.HeaderTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Title}" Visibility = "{Binding GroupHeaderVisibility}" />
        </DataTemplate>
    </GroupStyle.HeaderTemplate>

它应该起作用。祝你好运

[编辑]

我已经找到了一个解决方案,它不是很优雅,但它有效。以下是步骤:

  1. 将此xaml代码添加到您的ListView:

        <ListView.ItemsPanel>
            <ItemsPanelTemplate>
                <VirtualizingStackPanel />
            </ItemsPanelTemplate>
        </ListView.ItemsPanel>
    

2.获取GroupStyle的ContainerStyle副本(右键单击设计图面上的Listview。选择:"Edit GroupStyle"->"ContainerStyle"(。然后从ContentControl:的属性中删除此行

Margin = "4"

3.将上述ContainerStyle应用于您的列表视图。它应该起作用。

注意:步骤1是必要的,因为当ItemsPanel是ItemsStackPanel(默认设置(时,ContainerStyle在Windows 8.1上不再适用。

http://msdn.microsoft.com/en-us/library/windows/apps/dn263110.aspx

您正在绑定到类型为VisibilityVisibility属性。我的猜测是GroupHasHeader属性是一个布尔值;您应该使用布尔值到可见性的转换器。

最新更新