當我發現以下行爲時,我正在Winforms中實施/試驗Databindings和INotifyPropertyChanged。Control.Databindings意外的行爲與Poco-Viewmodel
來自Textbox1.Text的綁定魔法作品< - > Vm.Foo < - > Textbox2.Text(也是另一種方式)。但是,當我通過button.Click事件直接更改Vm.Foo它不起作用。
這裏發生了什麼?看來Control.Databindings也在我的Poco.Foo上引發了ChangedEvent。但是如何?我是否也可以手動執行此操作,而無需實施INotifyPropertyChangedim我的虛擬機?
爲了這個例子的意圖,我的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);
}
}
你有一個錯誤的觀點。 如果textBox1.Text被修改PropertyChanged爲此屬性引發,然後傳播到不引發PropertyChanged的Vm.Foo。但仍然textBox2.Text更改。 – jens