我有另一个关于将可见性绑定到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项目,但容器的空间仍然存在,它是&#39;只是空白。
如果我尝试在ItemContainer中设置可见性绑定:
<Setter Property="Visibility" Value="{Binding FooVisibility}" />
然后永远不会调用属性FooVisibility。
如果我有一个返回Visibility枚举的适当属性,隐藏特定ListView项目的适当方法是什么?
答案 0 :(得分:2)
UWP不支持Style
Setters
中的绑定:https://docs.microsoft.com/en-us/uwp/api/Windows.UI.Xaml.Setter#Windows_UI_Xaml_Setter_Value
您可以在Visibility
:
ItemTemplate
属性
<DataTemplate x:Key="FooTemplate">
<Grid Background="White" HorizontalAlignment="Stretch"
Visibility="{Binding FooVisibility}">
</Grid>
</DataTemplate>
或者您可以编写一些代码,以编程方式在根元素的DataContextChanged
事件的事件处理程序中设置绑定,如下所示:https://blog.magnusmontin.net/2016/02/28/disabling-selection-of-some-items-in-a-uwp-listview/
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 });
}
}
或者,您可以创建自己的绑定助手类: