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;
}
            }
        }
Другие вопросы по тегам