在MSDN文档中,我发现了一些文章,它们说将两个对象相互绑定不会有任何问题。所以我尝试使用WindowsForms应用程序。第一个对象是$ ->
$(document).on 'click','.clickable', (event) ->
target = $(event.target)
if target.is(':not(a)')
if $(this).attr('data-link')
$.ajax({
dataType: 'script',
url: $(this).data('link')
})
else
...
,第二个对象是以下类的实例:
TextBox
将using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ComponentModel;
namespace WindowsFormsApplication1
{
public class XmlEmulator : INotifyPropertyChanged
{
private string Captionfield;
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged()
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(""));
}
public string Caption
{
get
{
return this.Captionfield;
}
set
{
this.Captionfield = value;
NotifyPropertyChanged();
}
}
}
}
绑定到TextBox
可以正常工作,但如何将XmlEmulator.Captionfield
oroperty绑定到Captionfield
属性? TextBox.text
类是否必须从XmlEmulator
继承才能获得System.Windows.Forms.Control
属性?在这种情况下,我遇到了麻烦,因为我已经实现了Databindings
接口。
我该如何解决这个问题?
答案 0 :(得分:0)
在MSDN文档中,我发现了一些文章,说两个对象彼此绑定不会有任何问题。
这不正确,一个对象必须是Control
,而另一个可以是任何对象(包括Control
)。当您绑定到控件属性时,您可以指定绑定是否是"单向"或者"双向",以及何时通过Binding.DataSourceUpdateMode Property和Binding.ControlUpdateMode Property更新一方或另一方。我想你的绑定已经是"双向"如果您使用过像这样的标准代码
XmlEmulator emulator = ...;
TextBox textBox = ....;
textBox.DataBindings.Add("Text", emulator, "Caption");
如果修改文本框,则模拟器属性将更新。请注意,DataSourceUpdateMode
属性的默认值为OnValidation
,因此在您离开文本框后将更新模拟器。如果您希望在键入时立即发生,那么您需要通过修改上述代码来设置OnPropertyChanged
textBox.DataBindings.Add("Text", emulator, "Caption", true, DataSourceUpdateMode.OnPropertyChanged);
实际上Add
方法返回一个Binding
对象,所以你可以使用这样的东西
var binding = textBox.DataBindings.Add("Text", emulator, "Caption");
并探索/修改绑定属性。