Ich habe eine benutzerdefinierte Komponente, wo ich INotifyPropertyChanged
und IBindableComponent
implementiert habe.Databinding ApplicationSettings zu benutzerdefinierten Komponenten
Allerdings, wenn ich versuche, eine Eigenschaft Databind, fügt der Designer diese Linie:
this.component11.TestString =
global::WindowsFormsApplication2.Properties.Settings.Default.Setting;
stattdessen eine Bindung wie sie mit einem Text zu schaffen:
this.textBox2.DataBindings.Add(new System.Windows.Forms.Binding(
"Text",
global::WindowsFormsApplication2.Properties.Settings.Default,
"Setting2",
true,
System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
hätte ich dachte der Designer würde einfach schauen, ob IBindableComponent
implementiert ist und wenn es ist, generieren Sie die bindende Codierung anstelle des Zuordnungscodes.
Irgendwelche Ideen, warum dies mit einem Textfeld und nicht meine benutzerdefinierte Komponente funktioniert?
Hier ist meine eigene Komponente:
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");
Dies schien nicht zu arbeiten, erzeugt der Designer noch den Code: this.component11.TestString = global: : TestApplicationSettings.Properties.Settings.Default.TestSetting; Anstelle des korrekten Bindungscodes. Irgendwelche anderen Ideen anzusehen? Danke für die Beantwortung. – Clint
Warte, das funktioniert. Ich musste nur meine Komponente neu kompilieren, löschen und neu hinzufügen, nachdem ich die vorgeschlagenen Änderungen vorgenommen hatte. Vielen Dank! – Clint