c# - Poco-Viewmodel 的 Control.Databindings 意外行为

标签 c# winforms data-binding

当我发现以下行为时,我正在 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/

相关文章:

C# 从数据库中填充 CheckBoxList(奇怪的列/标题文本名称)

c# - 通过 WebClient/FTP 下载大文件时出现问题

c# - Winforms 系统托盘中的多个通知图标

c# - 如何将项目添加到 LINQ 检索的列表

c# - 加载数据并在此期间显示启动画面

c# - WPF 将枚举列表(或类似列表)绑定(bind)到复选框列表

data-binding - MVVM 单选按钮

java - Spring Webflow 中的数据绑定(bind)问题

c# - 未分配属性的对象初始值设定项

c# - c#中小数计算错误