ربط البيانات ApplicationSettings إلى مكونات مخصصة
-
09-06-2019 - |
سؤال
لدي مكون مخصص حيث نفذت
INotifyPropertyChanged
و IBindableComponent
.
ومع ذلك ، عندما أحاول databind عقار مصمم يضيف هذا خط:
this.component11.TestString =
global::WindowsFormsApplication2.Properties.Settings.Default.Setting;
بدلا من إنشاء ملزمة كما هو الحال مع مربع نص:
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 {
...
}
لا تنتمي إلى StackOverflow