在 WPF 的数据网格文本列中将布尔值绑定为“是”“否”

Kav*_*han 0 c# wpf xaml datagrid

我需要在数据网格单元格内将 0 和 1 布尔值显示为 YES 和 NO。

<DataGridTextColumn Header="Active" Binding="{Binding stuen.IsDelete}" CanUserResize="False" Width="* "  HeaderStringFormat="" >
    <DataGridTextColumn.ElementStyle>
        <Style TargetType="{x:Type TextBlock}">
            <Setter Property="VerticalAlignment" Value="Center"/>
            <Setter Property="HorizontalAlignment"  Value="Center"/>
        </Style>
    </DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
Run Code Online (Sandbox Code Playgroud)

rah*_*dev 7

足够简单 - 您可以使用附加属性(例如 YesNo)扩展状态模型,例如:

public string YesNo
{
   get {return !IsDelete ? "No" : "Yes"}
}
Run Code Online (Sandbox Code Playgroud)

现在将您的控件绑定到 status.YesNo 而不是 status.IsDelete。

或者BooleanToYesNoConverter- 您可以在绑定元素中使用。基本上,转换器将在 status.IsDelete = true 时返回 Yes,而在 status.IsDelete=false 时返回 No。

喜欢 :

public class BooleanToYesNoConverter : IValueConverter
        {
                public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
                {
                        if((bool)value) return "Yes";
                         return "No"
                }

                public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
                {
                        return null;
                        /* not sure if you need convert back */
                }
        }
Run Code Online (Sandbox Code Playgroud)

将此转换器添加为 Xaml 中的静态资源:

<Window.Resources>
                <local:BooleanToYesNoConverter  x:Key="BooleanToYesNoConverter" />
        </Window.Resources>
Run Code Online (Sandbox Code Playgroud)

然后将您的绑定属性更新为:

Binding="{Binding stuen.IsDelete Converter={StaticResource BooleanToYesNoConverter}}"
Run Code Online (Sandbox Code Playgroud)

其他替代解决方案是使用如下所示的触发器:

<TextBlock.Style>
                <Style TargetType="{x:Type TextBlock}">
                    <Setter Property="Text" Value="" />
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding status.IsDelete}" Value="Yes">
                            <Setter Property="Text" Value="No" />
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </TextBlock.Style>
Run Code Online (Sandbox Code Playgroud)