将bool属性绑定到WinForm的BackColor属性

时间:2013-11-16 11:14:44

标签: c# winforms data-binding binding

我的Form应用中有一个WinForm,其中包含TextBox,此TextBox绑定到FirstName的{​​{1}}属性对象

Person

当我的应用程序运行时,这个public class Person { string firstName; public string FirstName { get { return firstName; } set { firstName = value; this.isOdd = value.Length % 2; } } bool isOdd; public bool IsOdd { get {return isOdd; } } } 节目和用户可以在TextBox中键入他/她的名字,如何将Form的{​​{1}}属性绑定到BackColor } Form对象的属性(当IsOdd Person IsOdd设置为TrueBackColor Color.Green设置为FalseBackColor)?

2 个答案:

答案 0 :(得分:8)

Binding中的

winforms也与wpf非常相似。 WPF Converter winforms FormatBinding bind = new Binding("BackColor", person, "IsOdd"); bind.Format += (s, e) => { e.Value = (bool)e.Value ? Color.Green : Color.Red; }; control.DataBindings.Add(bind); Person支持winforms。您可以尝试以下代码:

EventNameChanged

对于班级OnEventNameChanged,您必须稍微修改一下。在winforms中,通过使用名称为INotifyPropertyChanged的事件以及名为WPF的提升者,可以通知更改。您可以在public class Person { string firstName; public string FirstName { get { return firstName; } set { firstName = value; IsOdd = value.Length % 2 != 0;//Note use IsOdd not isOdd } } bool isOdd; public bool IsOdd { get { return isOdd; } private set { if(isOdd != value){ isOdd = value; OnIsOddChanged(EventArgs.Empty); } } public event EventHandler IsOddChanged; protected virtual void OnIsOddChanged(EventArgs e) { var handler = IsOddChanged; if (handler != null) handler(this, e); } } 中找到此模式主要是。您还可以使用private set中更为熟悉的IsOdd。这是修改后的类:

isOdd

注意您可以使用{{1}}允许所有私有代码通过setter更改属性{{1}},并使用私有变量{{1}正确通知更改除非您必须在此之后附加一些通知代码,否则不会通知更改。此代码也经过测试!

答案 1 :(得分:1)

您无法将Color属性完全绑定到bool,您必须执行此类操作。 添加类型Color的只读属性取决于您的布尔值并绑定它。

internal class MyClass : INotifyPropertyChanged
{
    private bool _isOdd;
    public bool IsOdd 
    {
        get
        {
            return _isOdd;
        }
        set
        {
            _isOdd = value;
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs("IsOdd"));
                PropertyChanged(this, new PropertyChangedEventArgs("Color"));
            }
        }
    }

    public Color Color
    {
        get
        {
            return (IsOdd) ? Color.Green : Color.Red;
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
}

然后将此类实例绑定到任何控件的BackColor属性。

control.DataBindings.Add("BackColor", myclass, "Color");

注意:INotifyPropertyChanged接口实现是必须的,只有当您的属性发生更改时才会立即反映在绑定中。