【发布时间】:2012-05-07 15:08:03
【问题描述】:
我有一个绑定 ObservableCollection 的自我跟踪实体的 DataGrid
用户可以“删除” DataGrid 中的记录,但这些项目实际上并未从数据库中删除。
如何只显示未标记为已删除的行?
我正在使用 MVVM 模式。
【问题讨论】:
-
是的,有。你试过什么?
我有一个绑定 ObservableCollection 的自我跟踪实体的 DataGrid
用户可以“删除” DataGrid 中的记录,但这些项目实际上并未从数据库中删除。
如何只显示未标记为已删除的行?
我正在使用 MVVM 模式。
【问题讨论】:
使用CollectionView.Filter 技术。它非常面向 MVVM。
【讨论】:
只需添加DataGrid.RowStyle,您可以使用DataTriggers 将Visibility 设置为Collapsed 或更改Background (code example)。
【讨论】:
也许它比您所需要的信息多一点,但我遇到了完全相同的情况,并选择将行显示为灰色,或者当它们的状态切换为已删除时显示为“红色”。由于我使用的是 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 张图像:
【讨论】: