【问题标题】:Two Way Data Binding without XAML没有 XAML 的双向数据绑定
【发布时间】:2014-12-02 18:22:44
【问题描述】:

我有一个类,我想在其属性之一发生更改时使用它来更新文本框。我还希望能够在文本框更改时更改 classes 属性。换句话说,我希望能够进行双向数据绑定。我在网上看过,所有的例子都需要一个 XAML 文件。由于我不熟悉 XAML,如果可能的话,我想远离它。

是否可以在不使用 XAML 的情况下对类进行双向数据绑定?

更新:

我找到了这个http://msdn.microsoft.com/en-us/library/ms743695%28v=vs.110%29.aspx,它似乎有效。但是,我并不完全明白它在做什么。

更具体地说,我不明白 PropertyChanged 和 OnPropertyChanged 是如何相互关联的。

【问题讨论】:

  • 它是 WPF 应用程序吗?
  • 不,它是一个 WinForm (C#) 应用程序。
  • 你介意使用 ReactiveUI 框架吗?虽然我没有将它用于 WinForms,但它支持它。 stackoverflow.com/questions/24768640/…
  • 你需要了解 C# 事件。

标签: c# .net 2-way-object-databinding


【解决方案1】:

在 C# WPF 中,当您实现 INotifyPropertyChanged 时,您会获得 PropertyChanged。

所以,如果你写

PropertyChanged(this,  new PropertyChangedEventArgs("PersonName"));

您向观察者 (XAML) 提供属性 PersonName 已更改的信号,它将更新所有内容,例如UIElements 链接到该属性。

 protected void OnPropertyChanged(string name)
  {
      PropertyChangedEventHandler handler = PropertyChanged;
      if (handler != null)
      {
          handler(this, new PropertyChangedEventArgs(name));
      }
  }

您将属性名称(例如 PersonName)重载为字符串,以表明哪个属性已更改。

使用if(handler != null),您说只有在有任何观察者时才发送信号。

如果是这样,请在下一行中真正给出信号。

【讨论】:

  • 谢谢。我有一种感觉,我从 INotifyPropertyChanged 获得了 PropertyChanged。 Observer 是什么时候创建的?
  • 只要 XAML 中的 UIElement 在此对象上具有绑定,例如TextBox 的 Text 属性
猜你喜欢
  • 2018-07-27
  • 2021-01-27
  • 1970-01-01
  • 2011-04-12
  • 1970-01-01
  • 2016-04-10
  • 1970-01-01
  • 2013-02-24
  • 2015-08-08
相关资源
最近更新 更多