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

如何在WPF DataGrid文本列中将布尔值(0/1)显示为YES/NO?

在WPF DataGrid中绑定布尔/0-1值并显示YES/NO的解决方案

嘿,这个需求我太熟了!在WPF的DataGrid里把布尔值(包括用0、1表示的数字形式)转成YES/NO显示,最靠谱的方法就是用值转换器(IValueConverter)——不管是纯bool类型还是数字类型的0/1,它都能轻松搞定。下面我给你一步步拆解:

1. 创建值转换器类

首先我们要写一个实现IValueConverter接口的转换器,它负责把数据源的bool/int值转换成UI上显示的YES/NO,也可以支持反向转换(如果需要编辑单元格的话)。

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

namespace YourProjectNamespace.Converters // 替换成你项目的实际命名空间
{
    public class BoolToYesNoConverter : IValueConverter
    {
        // 从数据源到UI的转换逻辑
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            // 处理纯布尔值
            if (value is bool boolVal)
            {
                return boolVal ? "YES" : "NO";
            }
            // 处理0/1表示的布尔值(int类型)
            else if (value is int intVal)
            {
                return intVal == 1 ? "YES" : "NO";
            }
            // 可以扩展支持byte等其他数字类型,比如:
            // else if (value is byte byteVal)
            // {
            //     return byteVal == 1 ? "YES" : "NO";
            // }
            
            // 未知类型默认返回NO,也可以改成空字符串,按需调整
            return "NO";
        }

        // 从UI到数据源的反向转换(如果需要支持单元格编辑的话)
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if (value is string displayText)
            {
                bool isYes = string.Equals(displayText, "YES", StringComparison.OrdinalIgnoreCase);
                
                // 根据目标类型返回对应的值
                if (targetType == typeof(bool))
                {
                    return isYes;
                }
                else if (targetType == typeof(int))
                {
                    return isYes ? 1 : 0;
                }
            }
            
            // 转换失败时返回默认值
            return targetType == typeof(bool) ? false : 0;
        }
    }
}

2. 在XAML中引用转换器

接下来要在你的Window或UserControl的XAML里注册这个转换器:

首先添加命名空间引用(替换成你项目的实际命名空间):

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:converters="clr-namespace:YourProjectNamespace.Converters" <!-- 这里添加转换器的命名空间 -->
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">

然后在资源中声明转换器实例:

<Window.Resources>
    <converters:BoolToYesNoConverter x:Key="BoolToYesNoConverter"/>
</Window.Resources>

3. 在DataGrid列中绑定使用

现在就可以在DataGrid的文本列里使用这个转换器了,不管你绑定的是bool属性还是int类型的0/1属性:

绑定布尔类型属性

<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding YourDataSource}">
    <DataGrid.Columns>
        <!-- 绑定bool类型的IsActive属性 -->
        <DataGridTextColumn Header="是否激活" Binding="{Binding IsActive, Converter={StaticResource BoolToYesNoConverter}}"/>
    </DataGrid.Columns>
</DataGrid>

绑定int类型的0/1属性

<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding YourDataSource}">
    <DataGrid.Columns>
        <!-- 绑定int类型的Status属性(1=YES,0=NO) -->
        <DataGridTextColumn Header="状态" Binding="{Binding Status, Converter={StaticResource BoolToYesNoConverter}}"/>
    </DataGrid.Columns>
</DataGrid>

一些额外提示

  • 如果不需要支持单元格编辑,ConvertBack方法可以简化,直接返回Binding.DoNothing即可,不用处理反向转换逻辑。
  • 要是你的数据源里还有其他数字类型(比如byte、short),只需要在Convert方法里添加对应的类型判断就行,逻辑和int的处理一致。
  • 转换器是可复用的,整个项目里只要是需要把bool/0-1转成YES/NO的地方,都可以用这个转换器,不用重复写逻辑。

内容的提问来源于stack exchange,提问作者Kavinda Gehan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:06:20