[英]Binding in User Controls
假設我有以下代碼(在Winforms中):
public class SomeClass
{
public string Name { get; set; }
}
public partial class SomeControl : UserControl
{
private SomeClass inClass;
public string MyName { get; set; }
public SomeControl(SomeClass someClass)
{
InitializeComponent();
this.inClass = someClass;
SetupBinding();
}
private void SetupBinding()
{
this.DataBindings.Clear();
this.DataBindings.Add("MyName", this.inClass, "Name");
}
}
如果要在用戶控件之外更改SomeClass.Name的值,則MyName屬性將永遠不會更改。 我究竟做錯了什么?
謝謝
如果要進行雙向數據綁定, SomeClass必須使用INotifyPropertyChanged或具有名為NameChanged的事件。 您可以自己實現它,但我強烈建議Fody.PropertyChanged項目。
PS:我寫了一些擴展方法來創建綁定更容易和重構的友好方式。 在您的情況下,它看起來像這樣:
this.BindTo(inClass, c => c.MyName , m => m.Name);
方法本身:
public static class BindingExtensions
{
public static Binding BindTo<TControl, TControlProperty, TModel, TModelProperty>(this TControl control, TModel model, Expression<Func<TControl, TControlProperty>> controlProperty, Expression<Func<TModel, TModelProperty>> modelProperty, string format = null)
where TControl : Control
{
var controlPropertyName = ((MemberExpression)controlProperty.Body).Member.Name;
var modelPropertyName = ((MemberExpression)modelProperty.Body).Member.Name;
var formattingEnabled = !string.IsNullOrWhiteSpace(format);
var binding = control.DataBindings.Add(controlPropertyName, model, modelPropertyName, formattingEnabled, DataSourceUpdateMode.OnPropertyChanged);
if (formattingEnabled)
{
binding.FormatString = format;
}
return binding;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.