是否可以根据某些条件隐藏行?

时间:2012-05-07 15:08:03

标签: wpf datagrid row

我有一个绑定ObservableCollection自我跟踪实体的DataGrid

用户可以“删除”DataGrid中的记录,但这些项目实际上并未从数据库中删除。

如何才能显示未标记为已删除的行?

我正在使用MVVM模式。

3 个答案:

答案 0 :(得分:6)

使用CollectionView。过滤技术。它非常面向MVVM。

答案 1 :(得分:2)

只需添加DataGrid.RowStyle,您就可以使用DataTriggersVisibility设置为Collapsed或更改Backgroundcode example)。

答案 2 :(得分:1)

也许这是你所追求的更多信息,但我遇到了完全相同的情况,并选择将行显示为灰色,或者当他们的状态切换为删除时“重新”显示。你触发属性和样式目标类型可能会有所不同,因为我使用的是Xceed DataGrid而你正在使用内置的Datagrid,但它基本上是相同的:https://stackoverflow.com/a/10431650/529618

<Style TargetType="{x:Type xcdg:DataRow}" >
    <Style.Triggers>
        <DataTrigger Binding="{Binding Path=ObjectState}" 
                     Value="{x:Static Member=objectmodel:EnumObjectState.Deleted}" >
            <!-- You can do anything in this trigger such as hide, collapse, or disable the row. I chose to apply a custom effect. -->
            <Setter Property="Background" Value="#FFEED5D2"/>
            <Setter Property="ToolTip" Value="This entry will be permanently deleted the next time you save."/>
            <Setter Property="Effect">
                <Setter.Value>
                    <ui:ColourAdjustEffect Saturation="0" Gamma="0.6" BrightnessAdjustment="-0.2" RedAdjustment="0.04" />
                </Setter.Value>
            </Setter>
        </DataTrigger>
    </Style.Triggers>
</Style>

对于它的外观,请查看下面合并图像中的最后3张图片:

enter image description here