Hallo,
ich habe eine Frage. Momentan habe ich mich mit dem PropertyGrid beschäftigt und zwei Webcast von Microsoft angesehen.
Das PropertyGrid aufzubauen ist nicht so extrem schwer, nur frage ich mich ob das mit der DataSource funktionieren würde.
Ich habe eine Klasse alla:
public class Auto
{
public Auto() { }
public Color BackgroundColor {get;set;}
public Color Sitz {get;set;}
}
Ich weiß das man die Möglichkeit beim PropertyGrid eine DataSource zu binden hat.
Nur wie verhält sich das?
Weil ich wollte das Property (aus der Klasse) an ein Property (im PropertyGrid) binden.
Sprich, das ich nicht die Infos aus der DataSource lesen muß und dann entsprechend das GRid einstelle.
Ich habe zusätzlich ein Bild gemacht. Dort wird anhand der Pfeile das Binding gezeigt (was ich gerne haben möchte).
Ist es möglich Property an das Property zu binden? Wenn nicht, wie verhält sch generell das DataBinding?
MfG
DJ BlackEagle
Das PropertyGrid zeigt alle public Eigenschaften Deiner Klasse an wenn Du diese mittels SelectedObject zuweist.
Hi Knuddlbaer,
danke für die Antwort.
Ich glaube, ich habe noch was vergessen an Info zu geben. 😐
Das mit den SelectedObject ist mir soweit klar.
Nur habe ich eine Klasse die Serialisiert ist und mit dem XmlSerializer gespeichert und geladen wird.
Sprich ich lade die XML-Datei direkt in die Klasse (via XmlSerializer - CodeProject: Load and save objects to XML using serialization.).
Das heißt das die Klasse Auto das PropertyGrid mit dem Aufbau an Infos versorgt. Und eine Klasse Auto_DAten die gespeicherten Daten an Propertyrid übergibt, so das die Werte entsprechend ausgewählt sind. In dem Sinne, sobald ich den einen Wert im Grid ändere, auch in der DataSource geändert ist.
Ich hoffe das ist soweit klar, sonst mach ich noch paar Beispiele, wie ich es momentan mache.
Hallo DJ BlackEagle,
mir ist es noch nicht klar.
Wenn du ein Objekt der Klasse Auto_Daten an SelectedObject zuweisen würdest, würden - wie schon von Knuddlbaer gesagt - dessen öffentliche Properties im Property-Grid angezeigt werden, ohne dass man eine Klasse Auto_Aufbau und ohne dass man DataBinding braucht. Dabei ist es auch egal, woher die Daten kommen (also ob das Objekt deserialisiert wurde oder nicht).
herbivore
Hi herbivore,
dann würden alle Public Properties im PropertyGrid angezeigt. Das ist mir klar.
Soweit ist das ja gut, das ist ja nicht schwer.
Nur geht es darum das ich ne Klasse habe die Serialisiert ist und logischerweise auch Daten aus einem XML-Datei enthält.
Nur sollen die Daten in der Klasse (Inhalt der Werte), im PropertyGrid ausgewählt werden.
Ein Property im PropertyGrid kann ein enum sein und im PropertyGrid als Liste verfügbar sein. In der Daten-Klasse ist dann der Index vom enum gespeichert ist. Im PropertyGrid soll dann der Wert ausgewählt sein, aber logischerweise soll noch die Auswahl zuöffnen sein.
Ich hab mal nen mini Beispiel-Projekt angehangen. Wo eine Klasse Serialisiert ist, ebenfalls eine Collection für das DataSource ist enthalten etc.
So ungefähr sieht es in mein Projekt aus, nur im mini Format.
Umschrieben:
Sprich eine Klasse erklärt dem PropertyGrid welche Properties und welche Auswahlmöglichkeiten es gibt.
Und dann eine Klasse die Daten aus der XML-Datei enthält. Nun müßen die Daten ans PropertyGrid übergeben werden, so das die Daten im PropertyGrid ausgewählt sind. - Diese Klasse ist an das Objekt bindingsource1 angebunden.
Auf der Form existiert eine Listbox (an das Objekt "bindingsource" angebunden), wo man den Hersteller auswählen kann. Die Textboxen sind ebenfalls an das Objekt "bindingsource1" angebunden.
Die Motor-Textboxen sind auch an das Objekt "bindingsource1" gebunden, wurde aber via Code gemacht. Da der Designer keine Unterobjekte unterstützt.
Wie man im Beispiel-Projekt sehen kann, reagieren alle Textboxen, Comboboxen auf die Auswahl der Listbox.
Nun will ich das PropertyGrid via die Motor-Klasse beschreiben, welche Daten zur Auswahl stehen.
Nun muß ich die Daten/Werte aus dem Objekt "bindingsource1" ans PropertyGrid übergeben. So das das Verhalten gleich ist mit den Textboxen etc.
Gruß
Und warum benutzt du nicht das DataBinding auch für das PropertyGrid?
this.propertyGridMotor.DataBindings.Add("SelectedObject", this.bindingSource1, "Motor");
HI FZelle,
das wars. Dann also doch normale Binding.
Dann weiß ich auch wie Knuddlbaer es meinte.
Danke.
Gruß