【问题标题】:how to bind a non-boolean property to a boolean property如何将非布尔属性绑定到布尔属性
【发布时间】:2012-08-31 13:00:13
【问题描述】:

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

当 bool 为真否则为黑色时,如何处理使标签变为红色?

提前致谢。

【问题讨论】:

  • 这是 WPF 还是 WinForms?
  • @Patrick 这是 WinForms。
  • 使用当布尔值改变时改变颜色的视图模型。
  • @GertArnold 我会建议您的建议,但这不正是 bfaskiplar 要求避免的(“我不想在绑定源中使用 Color 属性”)吗?
  • @phoog 没错,但我认为那是因为他没有视图模型,否则问题根本就不存在。

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


【解决方案1】:

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

更新

如果您想向可以绑定的表单添加属性,请添加以下内容。

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

现在您可以将业务对象属性绑定到此属性,它应该可以工作了。

【讨论】:

  • 我不明白如果我在表单上添加 Color 属性会如何工作。我想你的意思是一个新的布尔属性将绑定到业务对象中的布尔值。但是,为什么可以将标签的颜色绑定到这个布尔值。我知道我可以使用一个简单的 if 语句,但我只想在初始化阶段做一次这项工作。除非我一直在循环中检查 bool 是否已更改或未手动更改,否则它将无法正常工作。因为我检查 bool 变量是否已更改的那些行将永远不会再次执行。
  • 看起来真不错。谢谢。
【解决方案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;
    }
}

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

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

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

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

【讨论】:

  • 啊,没关系。与此同时,问题已更新,说明使用了 WinForms。别理我。
  • OP 表示她/他正在使用 WinForms。
【解决方案3】:

如果你使用 Wpf,你可以使用 Converter

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

【讨论】:

  • OP 表示她/他正在使用 WinForms。
【解决方案4】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-21
    • 1970-01-01
    • 2012-11-15
    • 2018-09-21
    • 2011-08-26
    • 2016-09-26
    • 1970-01-01
    相关资源
    最近更新 更多