【问题标题】:Is it possible to hide rows according to some condition?是否可以根据某些条件隐藏行?
【发布时间】:2012-05-07 15:08:03
【问题描述】:

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

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

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

我正在使用 MVVM 模式。

【问题讨论】:

  • 是的,有。你试过什么?

标签: wpf datagrid row


【解决方案1】:

使用CollectionView.Filter 技术。它非常面向 MVVM。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 对于看似复杂的模板,它是否会使数据网格的滚动变慢?另外,如果中间行隐藏,Alternating-Row-Styles 会破坏行的备用背景色。
    • @AngelWPF:我不知道,尽管优化了折叠控件是可能的。没有提到交替着色,所以我认为没有必要考虑它。
    【解决方案3】:

    也许它比您所需要的信息多一点,但我遇到了完全相同的情况,并选择将行显示为灰色,或者当它们的状态切换为已删除时显示为“红色”。由于我使用的是 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 张图像:

    【讨论】:

      猜你喜欢
      • 2023-01-10
      • 2019-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-27
      • 2012-05-15
      • 2014-10-22
      • 1970-01-01
      相关资源
      最近更新 更多