如何将非布尔属性绑定到布尔属性

时间:2012-08-31 13:00:13

标签: c# .net winforms user-interface data-binding

我正在为我的项目设计GUI。 我需要做的是根据绑定源中的布尔值更改标签的颜色。但问题是我需要为标签分配一个颜色,而绑定源没有这个(我不想在绑定源中使用Color属性)。

当bool为true时,如何处理将标签设为红色,否则为黑色?

提前致谢。

4 个答案:

答案 0 :(得分:3)

由于您无法直接绑定它们,因此必须在任一侧创建一个额外的属性。您可以在(业务)对象(您说您不想要)中添加Color属性,这样就可以在窗体/控件上添加一个属性,该属性绑定到(业务)对象上的属性。

更新

如果要将属性添加到可绑定的表单,请添加以下内容。

public bool MyPropertyToBindTo {
    get { return _myLabel.Color == Color.Red; }
    set { _myLabel.Color = value ? Color.Red : Color.Black; }
}

现在您可以将business-object-property绑定到此属性,它应该可以正常工作。

答案 1 :(得分:2)

您可以使用转换器。 (我已从多个来源复制/更新了此代码,请原谅一些语法错误。)

public class BoolToColorConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        Color labelColor;
        // Implement your conversion code here ...

        return labelColor;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        // As far as I understood your question you
        // will not need to convert back.
        return DependencyProperty.UnsetValue;
    }
}

然后,您需要在UserControlWindow部分的Resources的XAML中定义它(转换器是命名空间)。 (在此示例中,converter映射到定义BoolToColorConverter的命名空间。)

<UserControl.Resources>
  <converter:BoolToColorConverter x:Key="boolToColor" />
</UserControl.Resources>

之后,您最终可以在XAML中使用它进行此绑定:

<Label Content="{Binding Path=YourBoundProperty, Converter={StaticResource boolToColor}}" />

答案 2 :(得分:1)

如果您使用Wpf,则可以使用Converter

关于颜色和价值的链接:http://www.c-sharpcorner.com/uploadfile/dpatra/value-converter-in-wpf-part-i/

答案 3 :(得分:0)

只是不要将boolean属性绑定到控件,覆盖DataBinding事件,并在该事件处理程序中根据布尔变量设置Color的{​​{1}}。 Label事件存在(至少部分),您可以放置​​对于传统数据绑定而言过于复杂的数据绑定逻辑。