将ApplicationSettings绑定到自定义组件
时间:2020-03-05 18:56:48 来源:igfitidea点击:
我已经在其中实现了一个自定义组件INotifyPropertyChanged
和IBindableComponent
。
但是,当我尝试对属性进行数据绑定时,设计器将其添加
线:
this.component11.TestString = global::WindowsFormsApplication2.Properties.Settings.Default.Setting;
而不是像使用TextBox那样创建绑定:
this.textBox2.DataBindings.Add(new System.Windows.Forms.Binding( "Text", global::WindowsFormsApplication2.Properties.Settings.Default, "Setting2", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
我本以为设计师只会看一下
实现了" IBindableComponent",如果是,则生成绑定
编码,而不是分配代码。
有什么想法为什么可以使用文本框而不是我的自定义组件吗?
这是我的自定义组件:
public partial class Component1 : Component, INotifyPropertyChanged, IBindableComponent { public Component1() { InitializeComponent(); } public Component1(IContainer container) { container.Add(this); InitializeComponent(); } private string teststring; [Bindable(true)] public string TestString { get { return teststring; } set { if (teststring != value) { teststring = value; FirePropertyChanged("TestString"); } } } #region INotifyPropertyChanged Members public event PropertyChangedEventHandler PropertyChanged; void FirePropertyChanged(string propertyName) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } } #endregion #region IBindableComponent Members private BindingContext bindingContext = null; public BindingContext BindingContext { get { if (null == bindingContext) { bindingContext = new BindingContext(); } return bindingContext; } set { bindingContext = value; } } private ControlBindingsCollection databindings; public ControlBindingsCollection DataBindings { get { if (null == databindings) { databindings = new ControlBindingsCollection(this); } return databindings; } set { databindings = value; } } #endregion } print("code sample");
解决方案
回答
尝试:
[ DesignerSerializationVisibility( DesignerSerializationVisibility.Hidden ), EditorBrowsable( EditorBrowsableState.Advanced ), Browsable( false ) ] public BindingContext BindingContext { ... } [ ParenthesizePropertyName( true ), RefreshProperties( RefreshProperties.All ), DesignerSerializationVisibility( DesignerSerializationVisibility.Content ), Category( "Data" ) ] public ControlBindingsCollection DataBindings { ... }