Ich habe eine ComboBox an eine Sammlung von Objekten gebunden, die als diese definiert sind.Machen Sie nur eine von vielen Steuerelementen basierend auf dem Wert eines anderen Steuerelements sichtbar
public class TierOption
{
public string Option { get; set; }
public Type DataType { get; set; }
}
public class TierOptions : ObservableCollection<Tier1Option>
{
}
Ich habe 3 andere zu dieser ComboBox bezogenen Kontrollen, die eine TextBox, ComboBox sind, oder ein WPFToolkit: Datepicker.
Ich muss nur das zugehörige Steuerelement anzeigen, das dem Datentyp (Type) des in der ersten ComboBox ausgewählten Objekts und keinem der anderen entspricht.
Pseudo-Code Beispiel: (wahrscheinlich zu nah # zu schlachten C aber hoffentlich vermittelt es die Idee)
switch (ComboBox.SelectedItem.DataType)
{
case String:
TextBox.Visibility = Visibility.Visible;
ComboBox.Visibility = Visibility.Hidden;
DatePicker.Visibility = Visibility. Hidden;
break;
case DateTime:
TextBox.Visibility = Visibility.Hidden;
ComboBox.Visibility = Visibility.Hidden;
DatePicker.Visibility = Visibility. Visible;
break;
<...so forth and so on...>
}
Meine Versuche sind in sehr Nicht-wpf sucht gewundene Verwirrungen geführt, die unabhängig funktioniert nicht. Da ich neu bei WPF bin, bemühe ich mich sehr, den besten Designpraktiken treu zu bleiben.
Vielen Dank!
+1 Ich denke, diese Idee ist besser als meine ursprüngliche Idee, Trigger zu verwenden. Wenn die Anzahl der Kontrollen zunimmt, würden Auslöser das Problem erschweren. Mit verschiedenen Datatemplates ist es möglich, imho zu gehen, da es später einfach ist, weitere Controls hinzuzufügen. – dowhilefor
Das sieht für mich so aus, als würde es funktionieren, wenn jedes Objekt in der ersten ComboBox einen bestimmten Typ hätte, aber jedes Objekt vom selben Typ (TierOption) ist, der eine Eigenschaft hat, die DataType definiert. Versteh ich etwas falsch? – elo
@elo Sorry, du hast Recht! Ich lese zu schnell, daher muss für jede Art von Option, die Sie in Ihre Liste eingeben, eine Klasse erstellt werden (die von TierOption erbt). – Jonas