当我发现以下行为时,我正在 Winforms 中实现/试验数据绑定(bind)和 INotifyPropertyChanged。
绑定(bind)魔术从 Textbox1.Text <-> Vm.Foo <-> Textbox2.Text(也是另一种方式)起作用。但是当我直接通过按钮更改 Vm.Foo 时。Click-Event 它不起作用。
这里发生了什么? Control.Databindings 似乎也在我的 Poco.Foo 上引发了 ChangedEvent。但是怎么办?我也可以在不实现 INotifyPropertyChangedim 我的 VM 的情况下手动执行此操作吗?
为了这个例子,我的 Viewmodel 是一个 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);
}
}
最佳答案
added data bindings在您的文本框上引发 PropertyChanged 事件并更新您的 Vm.Foo 因为 Control.Text 是已更改并引发事件的属性。不是 VM.Foo。要在 VM.Foo 上引发 PropertyChanged 事件而不实现 INotifyPropertyChanged,请尝试 Update Controls for Winforms
关于c# - Poco-Viewmodel 的 Control.Databindings 意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35438075/