我想将控件绑定到实例的属性。但是,此属性将在内部更改,因此INotifyPropertyChanged
某种方式不起作用。
例如,我想显示某个容器中当前存在多少元素。所以我的选择是将Count
绑定到标签或什么。但即使Count
属性已更改为另一个数字,UI也不会更改。
我不想拥有所有内容的包装类,因为包装器不会解决问题的子集。另一个例子是,如果我想知道Timer过期需要多长时间,它会在内部发生变化,我甚至无法使用包装器来帮助我。
那么什么是将控件绑定到任何属性时解决此问题的一般方法?
答案 0 :(得分:0)
有很多方法。
您可以使用要绑定的控件的数据绑定属性。以下内容应指导您获得更好的答案: http://msdn.microsoft.com/en-us/library/system.windows.forms.control.databindings(v=vs.110).aspx
或者,您可以使用自定义事件,只需在具有控件的表单上注册这些事件即可。当事件触发时,在必要时处理事件。
示例:
在您的模型类中:
class myModel
{
public event EventHandler OnNameChanged(object sender, NameChangedEventArgs e); = delegate { };
private _name;
public string Name
{
get { return _name; }
set
{
_name = value;
if (OnNameChanged != null)
OnNameChanged(this, new NameChangedEventArgs(value))
}
}
}
public class NameChangedEventArgs : EventArgs
{
private _name;
public NameChangedEventArgs(string name) { _name = name; }
public Name { get { return _name; } }
}
然后在您的表单中注册参加活动:
public class form1
{
private myModel model;
public form()
{
Initialize();
}
private void Initialize()
{
model.OnNameChanged += new EventHandler(model_OnNameChangedEvent);
}
private void model_OnNamedChangedEvent(object sender, NameChangedEventArgs e)
{
textbox.text = e.Name;
}
}
现在,当model.Name更改时,模型的OnNameChanged事件将触发。已注册到该事件的任何对象都可以以自己的方式处理它。