0

私はItemsControlを別のItemsControlの中に持っています。このItemsControlには、販売されたアイテムのリストが含まれています。UWP: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}}"> 

どのようにして行全体を非表示にすることができますか?

おかげ

+0

あなたがリストボックスの代わりのItemsControlを使用することができます。私はあなたが不要なアイテムを削除する以外のオプションはありませんitemscontrolと恐れています。あなたがListBoxを使うことができるなら、私はあなたにソリューションを提供することができます – Archana

+0

はい、私はListBoxを使うことができます...助けてもらえますか? :) – Sam

+0

実際にItemsControlで行うことができます。私は他の解決策を見つけました。私は答えを投稿します。 – Archana

答えて

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

こんにちはLovetoCode、私はあなたのソリューションを試みたが、 "grid.Tag"はnullです。何か案が? – Sam

+0

Opps。私はコードを更新します。 – Archana

+0

こんにちはLovetocode、ありがとう!できます!ただし、フィールドが更新されると(Profitが正になります)、Grid_Loadedは再び呼び出されません。何か案が? – Sam

関連する問題