Individual DataGrid Row Visibility

2020-07-08 06:27发布

I have a WPF DataGrid bound to a collection of Entity Framework objects that's inside a parent EF object. Something along the lines of:

<DataGrid ItemsSource="{Binding SelectedCustomer.Orders}" />

Now when I want to "delete" an Order, I don't want to actually delete it from the data source, I simply want to set its IsDeleted property to true so the data is retained.

My question is: how can I get my DataGrid to skip a row if it's IsDeleted property is true? I would really like to use binding and not codebehind. Something like this would be wonderful:

<DataGrid ItemsSource="{Binding SelectedCustomer.Orders}" RowVisibilityPath="IsDeleted" />

Kind of along the lines of DisplayMemberPath. I realize I would need to convert the state of IsDeleted, but that's a different topic.

Any ideas?

3条回答
男人必须洒脱
2楼-- · 2020-07-08 07:00

Aside from using a CollectionView as mentioned you can do this via the RowStyle:

<DataGrid.RowStyle>
    <Style TargetType="{x:Type DataGridRow}">
        <Style.Triggers>
            <DataTrigger Binding="{Binding IsDeleted}" Value="True">
                <Setter Property="Visibility" Value="Collapsed"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>
</DataGrid.RowStyle>
查看更多
太酷不给撩
3楼-- · 2020-07-08 07:16

You can use a CollectionView to filter your data.

查看更多
Fickle 薄情
4楼-- · 2020-07-08 07:24
<DataGrid.RowStyle>
    <Style TargetType="{x:Type DataGridRow}">
       <Setter Property="Visibility" Value="{Binding IsDeleted, Converter={StaticResource BoolToVisibility}}"/>                                     
    </Style>
</DataGrid.RowStyle>
查看更多
登录 后发表回答