2017-07-07 55 views
0

我有一个DataGrid,我从中添加和删除项目。这是我目前拥有的代码:如何隐藏完整的DataGrid行?

<DataGrid x:Name="ItemsToDo"> 
     <DataGrid.Columns> 
      <DataGridTemplateColumn Header="Info> 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <DataTemplate.Triggers> 
          <DataTrigger Binding="{Binding IsDone}" Value="True"> 
           <Setter Property="Visibility" Value="Collapsed"/> 
          </DataTrigger> 
         </DataTemplate.Triggers> 
         <TextBlock Text="{Binding Description}"/> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 
      <DataGridTemplateColumn Header="Deadline"> 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <DataTemplate.Triggers> 
          <DataTrigger Binding="{Binding IsDone}" Value="True"> 
           <Setter Property="Visibility" Value="Collapsed"/> 
          </DataTrigger> 
         </DataTemplate.Triggers> 
         <TextBlock Text="{Binding InputDeadline}"/> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 
     </DataGrid.Columns> 

但是当行的两列设置为崩溃,该行并没有消失,但它看起来是这样的: 进入2不完全消失

enter image description here

我如何删除此行,而无需使用视图模型?有没有比知名度更好的财产?

回答

0

您应该从单元格的模板中删除DataTrigger,并在整行而不是单个单元格上应用可见性触发器。

例如:

<DataGrid ItemsSource="{Binding Items}" AutoGenerateColumns="False"> 
    <DataGrid.RowStyle> 
     <Style TargetType="DataGridRow"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding IsDone}" Value="True"> 
        <Setter Property="Visibility" Value="Collapsed"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </DataGrid.RowStyle> 
    <DataGrid.Columns> 
     <DataGridTemplateColumn Header="Info"> 
      <DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <TextBlock Text="{Binding Description}"/> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellTemplate> 
     </DataGridTemplateColumn> 
     <DataGridTemplateColumn Header="Deadline"> 
      <DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <TextBlock Text="{Binding InputDeadline}"/> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellTemplate> 
     </DataGridTemplateColumn> 
    </DataGrid.Columns> 
</DataGrid>