我的Form
应用程序中有一个WinForm
,其中包含一个TextBox
,并且此TextBox
绑定(bind)到FirstName
对象的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; } }
}
当我的应用程序运行时,此
Form
显示出来,用户可以在文本框中键入自己的名字,如何将BackColor
的Form
属性绑定(bind)到IsOdd
对象的Person
属性(当IsOdd
是True
时BackColor
设置为Color.Green
以及何时是False
将BackColor
设置为Color.Red
)? 最佳答案
Binding
中的winforms
也与wpf
非常相似。在WPF
中,您有Converter
;在winforms
中,是,它受名为Format
的事件支持。您可以尝试以下代码:
Binding 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
允许所有私有(private)代码通过setter更改属性IsOdd
并正确通知更改,使用私有(private)变量isOdd
不会通知更改,除非您必须在此之后添加一些通知代码。此代码也经过测试! 。关于c# - 将bool属性绑定(bind)到WinForm的BackColor属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20017748/