【问题标题】:Two way data binding to a control under a property两种方式数据绑定到属性下的控件
【发布时间】:2013-10-04 18:58:18
【问题描述】:

我有一个自定义类,我在其中实现了 INotifyPropertyChanged,我可以很高兴地将它绑定到表单上 TextBox 的 .Text 属性,并让数据双向流动。

我现在正试图通过一个属性在用户控件上的文本框上实现同样的功能:

public string MyProperty
{
    get { return MyPropertyTextBox.Text; }
    set { MyPropertyTextBox.Text = value; }
}

我可以将我的类绑定到 Usercontrol 上的MyProperty 以便设置值。

但是我如何获得它,以便在我编辑文本框时将更改反馈给我的班级?

编辑:

不确定我解释得很好 + 它是 WinForms,而不是 WPF。

文本框本身没有绑定,我希望文本框的“TextChanged”事件也触发用户控件属性的“PropertyChanged”。为自己构建了一个概念验证测试,让它发挥作用,然后设法在我的项目中实现它。

感谢您的建议。

【问题讨论】:

  • ASP.NET,Windows 窗体

标签: c# winforms


【解决方案1】:

OnPropertyChanged 方法添加到您的属性。像这样的:

private string _myPropertyText;
public string MyProperty
{       
    get { return _myPropertyText; }
    set { 
         if(_myPropertyText != value) 
         {
            _myPropertyText = value; 
            OnPropertyChanged("MyPropertyTextBox");
         }
        }
}

您没有在问题中提及 XAML,但正如 @RetailCoder 所指出的,您的 XAML 也需要正确设置,就像 Alan 的回答一样。

<TextBox Text="{Binding myProperty,UpdateSourceTrigger=PropertyChanged}" 

【讨论】:

  • +1 但如果更改需要传播在编辑文本时,则必须与 Alan 的回答结合使用。否则我相信只有当文本框失去焦点时才会真正发生变化。
【解决方案2】:

如果您希望它在编辑时更新,请使用此 xaml

<TextBox Text="{Binding myproperty,UpdateSourceTrigger=PropertyChanged}" 

【讨论】:

  • +1 但这必须与实际使用 INotifyPropertyChanged 实现一起做某事,正如 paqogomez 的回答所提到的那样。
【解决方案3】:

当您直接从 textbox.Text 准备好时,将直接检测到任何更改,无需额外代码

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-08
    • 1970-01-01
    • 2016-02-27
    • 1970-01-01
    • 2022-07-31
    • 1970-01-01
    相关资源
    最近更新 更多