Hallo zusammen,
in einer Textdatei möchte ich WPF-Controls definieren können. Nach dem Einlesen der Datei sollen diese WPF-Controls erzeugt werden. Hintergrund ist der, dass eine einzige Software für verschiedene Eingabeparameter konfiguriert werden kann.
Das funktioniert soweit auch und sieht grob wie folgt aus:
Textdatei:
Code:
DEF_USERPARAM: PROGRAM(Name="Bezeichnung", Datatype="string", UIPosX=0, UIPosY=75, UIWidth=100)
DEF_USERPARAM: PROGRAM(Name="Anzahl Tests", Datatype="int32", UIPosX=130, UIPosY=75, UIWidth=50)
Ein Parser macht mir daraus das hier:
Code:
// Key = Parameter-Name
// Value = Object mit den Properties "UIPosX" etc.
Dictionary<string, DefUserParamProgram> ProgramParam
Über eine Foreach-Schleife erzeugt mir das 2 x eine WPF-TextBox an den entsprechenden Prositionen (UIPosX/UIPosY).
Die Binding-Daten sehen so aus:
Code:
public class UIElemData : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
private Thickness _margin;
public Thickness Margin
{
get { return _margin; }
set
{
_margin = value;
OnPropertyChanged("Margin");
}
}
private int _width;
public int Width
{
get { return _width; }
set
{
_width = value;
OnPropertyChanged("Width");
}
}
// ...
}
Der Code zum Erzeugen der WPF-Controls ist folgender:
Code:
UIElemData uiElemData = new UIElemData();
// ... (Zuweisung der Properties)
StackPanel pnlElem = new StackPanel();
pnlElem.DataContext = uiElemData;
pnlElem.SetBinding(StackPanel.MarginProperty, new Binding("Margin"));
// ...
TextBox elemStr = new TextBox();
elemStr.SetBinding(TextBox.WidthProperty, new Binding("Width"));
pnlElem.Children.Add(elemStr);
Wie gesagt, das funktioniert so alles und die Elemente werden erzeugt.
Für mich momentan unlösbar ist folgendes:
Die Oberfläche steht nun und diese soll verschiedene "Parametersätze" verwalten können:
Bei Parametersatz 1 enthalten die 2 TextBoxen z.B. die Werte "ABC" und "1", bei Parametersatz 2 "DEF" und "7".
Der Parametersatz soll aus einer ComboBox ausgewählt werden können (als "Tag" könnte hier der Satz-Index hinterlegt sein). Und je nach gewähltem Parametersatz sollen die Werte in den WPF-Controls aktualisiert werden. Hierfür muss auch TwoWay-Binding möglich sein.
Wie kann sowas realisiert werden? Ich vermute irgendwie mit MultiBinding, aber ich habe keine Idee, wie das hier aussehen könnte bzw. ob das Binding-Object "UIElemData" überhaupt in der Art geeignet ist.
Das Ganze muss natürlich im Code-Behind den WPF-Controls zugewiesen werden können, da diese zur
Design-Time nicht bekannt sind.
Wer hat Ideen und kann mir helfen?
Grüße
Matze