You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF使用MultiBinding绑定双值到同一属性解决表格选中行样式丢失问题

1. 替换原有单值转换器为多值转换器

将原来实现IValueConverter的转换器改为实现IMultiValueConverter,可以同时接收两个绑定值做逻辑判断:

using System;
using System.Globalization;
using System.Windows;
using System.Windows.Data;
using System.Windows.Media;

public class BookMarkMultiConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        // 绑定顺序:第一个是数据源的isBookMarked,第二个是GridCell的IsSelected属性
        if (values == null || values.Length < 2) 
            return Brushes.White;

        // 优先判断选中状态,保留默认选中样式
        if (values[1] is bool isSelected && isSelected)
        {
            // 直接返回系统默认选中高亮色,也可以根据需求自定义选中+标记的组合色
            return SystemColors.HighlightBrush;
        }

        // 未选中状态下判断书签标记
        if (values[0] is bool isBookMarked && isBookMarked)
        {
            return Brushes.Yellow;
        }

        return Brushes.White;
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

2. 声明转换器资源

在你的窗口/页面/全局资源字典中添加转换器实例声明,注意替换local为你转换器所在的命名空间:

<Window.Resources>
    <local:BookMarkMultiConverter x:Key="BookMarkMultiConverter"/>
    <!-- 其他原有资源 -->
</Window.Resources>

3. 修改GridCell样式的Background绑定为MultiBinding

替换原来的单值绑定为多值绑定,同时绑定数据源的isBookMarked和控件自身的IsSelected属性:

<Style TargetType="syncfusion:GridCell" x:Key="ComCell">
    <Setter Property="Foreground" Value="{Binding COMPort , Converter={StaticResource CVconverters }  }" />
    <!-- 替换原Background的单绑定为以下多绑定 -->
    <Setter Property="Background">
        <Setter.Value>
            <MultiBinding Converter="{StaticResource BookMarkMultiConverter}">
                <Binding Path="isBookMarked"/>
                <Binding Path="IsSelected" RelativeSource="{RelativeSource Self}"/>
            </MultiBinding>
        </Setter.Value>
    </Setter>
</Style>

逻辑说明

  • 优先级为:行选中状态 > 书签标记状态,选中时优先展示系统默认选中样式,不会被书签背景覆盖
  • 如果需要选中时也保留书签标记效果,可以修改转换器逻辑,比如选中且有标记时返回橙黄色,自行调整返回的Brush即可。

内容的提问来源于stack exchange,提问作者ברק רוזנפלד

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 01:15:07