【发布时间】:2015-07-17 17:51:59
【问题描述】:
所以,我的问题是关于 Windows 表单数据绑定背后的确切方法。
我编写了一个简单的代码,在其中创建了一个视图、一个 IViewModel 接口和一个 ViewModel。
interface IVM
{
}
和
public class Vm : IVM
{
int number;
public int Number
{
get
{
return this.number;
}
set
{
this.number = value;
}
}
}
表格如下:
public partial class Form1 : Form
{
private IVM vm;
public Form1()
{
InitializeComponent();
this.vm = new Vm();
this.iVMBindingSource.DataSource = this.vm;
}
}
相关的设计师部分是:
this.textBox1.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.iVMBindingSource, "Number", true));
...
this.iVMBindingSource.DataSource = typeof(WindowsFormsApplication1.IVM);
可以清楚的看到IViewModel接口并没有发布Number属性,但是具体的ViewModel类有一个Number属性。
虽然在设计时我无法使用设计器绑定属性(因为 IVM 没有 Number 属性),但我可以手动将“iVMBindingSource - Number”写入文本框的 Test 属性,以进行绑定。
我的问题是,绑定到底是如何工作的?为什么我在尝试访问 IVM 不存在的 Number 属性时没有收到运行时错误? (我测试过,它实际上正确地改变了 VM 的 Number 属性)
它是否使用某种反射?这个“神奇”的绑定字符串是如何工作的?
感谢您的回答!
【问题讨论】:
-
反思,我相信。还有一些用于通知更改的支持事件(您的属性不会引发这些事件,因此您的绑定是一次性的)。
-
我知道,我这次不关心 INotifyPropertyChanged,只是想知道它是如何工作的
标签: c# winforms data-binding solid-principles