UWP: Скрыть элементы управления элементами
У меня есть ItemsControl внутри другого ItemsControl. Это ItemsControl, содержит список проданных товаров.
Я хотел бы отобразить те предметы, которые продаются ниже себестоимости (отрицательная прибыль). Но у меня проблема с сворачиванием элемента (строки).
<ItemsControl>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
...
...
...
<ItemsControl ItemsSource="{Binding SoldItems}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid> <!--If I hide the grid, it will create empty space.-->
...
...
...
<TextBlock Text="{Binding Profit}"></TextBlock>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Если я попытался скрыть сетку, она отображает пустую строку. Это выглядит странно, поскольку там есть пустой пробел.
<Grid Visibility="{Binding Profit, Mode=OneWay, Converter={StaticResource ProfitVisibilityConverter}}">
Есть идеи, как спрятать весь ряд?
Спасибо
1 ответ
Решение
<ListView x:Name="MyListView">
<ListView.ItemTemplate>
<DataTemplate >
<Grid Visibility="{Binding visible}" Tag="{Binding ElementName=MyListView}" Loaded="Grid_Loaded" >
<TextBlock Text="{Binding Name}"/>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
private void Grid_Loaded(object sender, RoutedEventArgs e)
{
Grid grid = sender as Grid;
//For items control
// ContentPresenter item = (ContentPresenter)(grid.Tag as ItemsControl).ContainerFromItem(grid.DataContext);
ListViewItem item = (ListViewItem)(grid.Tag as ItemsControl).ContainerFromItem(grid.DataContext);
//Or you can directly access listview
// ListViewItem item = (ListViewItem)(MyListView as ItemsControl).ContainerFromItem(grid.DataContext);
if ((grid.DataContext as Test).visible == Visibility.Collapsed)
{
if (item != null)
{
Binding binding = new Binding();
binding.Mode = BindingMode.TwoWay:
binding.Source = (grid.DataContext as your model class)
binding.Path = new PropertyPath("givevisibilityproperty")
// Attach the binding to the target.
item.SetBinding(ListViewItem.VisibilityProperty, binding);
// (item ).Visibility = Visibility.Collapsed;
}
}
}