我的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
设置为True
时BackColor
Color.Green
设置为False
到BackColor
)?
答案 0 :(得分:8)
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
中更为熟悉的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
接口实现是必须的,只有当您的属性发生更改时才会立即反映在绑定中。