Xaml 更改listview项的可见性

Xaml 更改listview项的可见性,xaml,uwp,uwp-xaml,Xaml,Uwp,Uwp Xaml,我还有一个关于将可见性绑定到listview项的问题,这个问题得到了回答 我现在遇到的问题是,我试图将可见性绑定到listview项的属性,但它似乎不起作用 这是我的密码: <ListView ItemsSource="{Binding FooList}" ItemTemplate="{StaticResource FooTemplate}" Grid.Row="3"> <ListView.ItemContainerStyle>

我还有一个关于将可见性绑定到listview项的问题,这个问题得到了回答

我现在遇到的问题是,我试图将可见性绑定到listview项的属性,但它似乎不起作用

这是我的密码:

<ListView 
    ItemsSource="{Binding FooList}"
    ItemTemplate="{StaticResource FooTemplate}"
    Grid.Row="3">
    <ListView.ItemContainerStyle>
        <Style TargetType="ListViewItem">
            <Setter Property="Padding" Value="0" />
            <Setter Property="MinHeight" Value="0" />
            <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
        </Style>
    </ListView.ItemContainerStyle>
</ListView>

以及模板:

<DataTemplate x:Key="FooTemplate">
            <Grid Background="White" HorizontalAlignment="Stretch">
   //template stuff
</Grid>

//模板材料
如果我尝试在模板中设置网格的可见性,它会正确绑定,并且不会显示不应该显示的Foo项,但是容器的空间仍然存在,它只是空白

如果我尝试在ItemContainer中设置可见性绑定:

<Setter Property="Visibility" Value="{Binding FooVisibility}" />

那么属性FooVisibility就永远不会被调用


如果我有一个返回可见性枚举的适当属性,那么隐藏特定ListView项的适当方法是什么?

UWP不支持
样式中的绑定
Setters

您可以在
ItemTemplate
中绑定根元素的
Visibility
属性:

<DataTemplate x:Key="FooTemplate">
    <Grid Background="White" HorizontalAlignment="Stretch" 
          Visibility="{Binding FooVisibility}">

    </Grid>
</DataTemplate>
或者,您可以创建自己的绑定帮助器类:


当我这样做时,项目不会呈现,但容器仍然呈现,因此我看到一个空白框,其中显示设置为可见性的Foo项目。处理网格的DataContextChanged事件,并以编程方式设置绑定。查看我的编辑。感谢所有帮助。当我添加DataContextChanged时,不会调用FooVisibility。输出窗口中没有绑定错误。如果我直接将可见性设置为折叠,listview项将正确折叠,因此这似乎是正确的路径,我只是不确定为什么FooVisibility从未被调用。好的,您还需要将绑定的源设置为网格的DataContext。我再次编辑了我的答案。
private void Grid_DataContextChanged(FrameworkElement sender, DataContextChangedEventArgs args)
{
    Grid grid = sender as Grid;
    ListViewItem lvi = listView.ContainerFromItem(grid.DataContext) as ListViewItem;
    if (lvi != null)
    {
        lvi.SetBinding(ListViewItem.VisibilityProperty, new Binding() { Path = new PropertyPath("FooVisibility"), Source = grid.DataContext });
    }
}