Control.Databindings 意外行为与 Poco-Viewmodel.
本文关键字:Poco-Viewmodel Databindings 意外 Control | 更新日期: 2023-09-27 18:34:54
当我发现以下行为时,我在Winforms中实现/试验Databindings和INotifyPropertyChanged
。绑定魔法从 Textbox1.Text <-> Vm.Foo <-> Textbox2.Text (也是另一种方式(开始工作。但是当我直接通过按钮更改 Vm.Foo 时。点击事件它不起作用。
这是怎么回事?似乎Control.Databindings在我的Poco.Foo上也引发了一个ChangedEvent。但是怎么做呢?我也可以在不实施 INotifyPropertyChangedim 我的 VM 的情况下手动执行此操作吗?
为了这个例子,我的视图模型是一个Poco,而不是实现INotifyPropertyChanged。
class Form2 : Form
{
private TextBox textBox1;
private TextBox textBox2;
public Poco Vm = new Poco();
private Button btn;
public class Poco
{
public string Foo { get; set; }
}
public Form2()
{
textBox1 = new TextBox();
textBox2 = new TextBox();
btn = new Button();
textBox1.Location = new System.Drawing.Point(10, 10);
textBox2.Location = new System.Drawing.Point(10, 40);
btn.Location = new System.Drawing.Point(10, 70);
btn.Text = "btn";
this.Controls.Add(textBox1);
this.Controls.Add(textBox2);
this.Controls.Add(btn);
btn.Click += (sender, args) =>
{
Vm.Foo += "#";
};
this.textBox1.DataBindings.Add(nameof(Control.Text), Vm, nameof(Vm.Foo), false, DataSourceUpdateMode.OnPropertyChanged);
this.textBox2.DataBindings.Add(nameof(Control.Text), Vm, nameof(Vm.Foo), false, DataSourceUpdateMode.OnPropertyChanged);
}
}
添加的数据绑定会在文本框上引发 PropertyChanged 事件并更新 Vm.Foo,因为 Control.Text 是已更改并引发事件的属性。不是VM.Foo。要在 VM.Foo 上引发 PropertyChanged 事件而不实现 INotifyPropertyChanged 尝试更新 Winforms 的控件