【问题标题】:Empty the cell when it is disabled禁用时清空单元格
【发布时间】:2018-08-31 07:06:00
【问题描述】:

我有一个数据网格,它使用 DataGridCell 类型的样式来禁用某些单元格,具体取决于来自同一行的另一个单元格的值。

以下是样式的 XAML

    <Style x:Key="testCellStyle" TargetType="{x:Type DataGridCell}">
        <Style.Triggers>
            <DataTrigger Binding="{Binding Segment}" Value="0">
                <Setter Property="IsEnabled" Value="False"/>
            </DataTrigger>
            <DataTrigger Binding="{Binding Segment}" Value="1">
                <Setter Property="IsEnabled" Value="True"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>

这部分正在按预期工作。

现在,由于列绑定到相应更新数据库的 VM 属性,我需要在禁用它之前清空单元格,以免在数据库中保留垃圾值。

作为 C# 新手,如果可能,我更愿意为此目的使用 XAML。

如何实现这种行为?

【问题讨论】:

    标签: c# wpf datagrid datagridcell


    【解决方案1】:

    作为 C# 新手,如果可能,我更愿意为此目的使用 XAML。

    XAML 是一种标记 语言。它不能用于清除源对象中的任何值。

    您应该做的是在 Segment 属性设置为 1 后立即清除数据对象中的值,并且您应该以编程方式执行此操作,或者在 Segment 和其他属性自行定义的类中,或来自设置Segment 属性的类。

    您既不能也不应该使用DataTrigger 清除基础数据对象的任何值。

    【讨论】:

    • 我正在使用ElementStyleDataTrigger 为相关列找到解决方案,您能否进一步解释一下为什么不应清除基础数据对象的任何值使用DataTrigger ?
    • 有什么要解释的?数据触发器检查某些属性的值并设置 target 属性的值。
    【解决方案2】:

    我的诀窍:将Foreground 设置为Transparent,这意味着该值仍然存在但不可见。

    <DataTrigger Binding="{Binding Segment}" Value="0">
        <Setter Property="IsEnabled" Value="False"/>
        <Setter Property="Foreground" Value="Transparent"/>
    </DataTrigger>
    

    【讨论】:

    • @PrabalKajla 不,当您的属性 Segment == 0 时,它只是将单元格的显示,单元格的前景更改为透明
    • 好吧..感谢您的解决方案,但它不会为我解决问题!
    猜你喜欢
    • 1970-01-01
    • 2019-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-16
    • 1970-01-01
    相关资源
    最近更新 更多