0

Ich habe ein ItemsControl in einem anderen ItemsControl. Dieses ItemsControl enthält eine Liste der verkauften Artikel.UWP: Objekte ausblendenControl items

Ich möchte die Artikel anzeigen, die unter den Kosten (negativer Gewinn) verkauft wurden. Aber ich habe Probleme beim Zusammenklappen des Artikels (Zeile).

<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> 

Wenn ich versuchte, das Raster zu verbergen, zeigt es leere Zeile an. Es sieht komisch aus, da dort eine leere Lücke ist.

<Grid Visibility="{Binding Profit, Mode=OneWay, Converter={StaticResource ProfitVisibilityConverter}}"> 

Haben Sie eine Idee, wie Sie die gesamte Zeile ausblenden?

Dank

+0

Können Sie Listbox statt Itemscontrol. Ich habe Angst mit Itemscontrol Sie haben keine andere Möglichkeit, als unerwünschte Elemente zu entfernen. Wenn Sie ListBox verwenden können, kann ich Ihnen die Lösung anbieten – Archana

+0

Ja ja, ich kann eine ListBox verwenden ... Könnten Sie mir helfen? :) – Sam

+0

Eigentlich können Sie mit dem ItemsControl machen. Ich habe eine andere Lösung gefunden. Ok, ich werde die Antwort posten. – Archana

Antwort

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; 
} 
      } 
     } 
+0

Hallo LovetoCode, ich habe deine Lösung versucht, aber "grid.Tag" ist null. irgendeine Idee? – Sam

+0

Opps. Ich werde den Code aktualisieren. – Archana

+0

Hallo Lovetocode, danke dafür! Es klappt! Wenn das Feld jedoch aktualisiert wird (Profit wird positiv), wird Grid_Loaded nicht erneut aufgerufen. Irgendeine Idee? – Sam