neu geschriebenHandhabung Styling mit Datenbindung
Ich habe eine Anwendung, die eine Datei empfängt. Diese Datei enthält viele bearbeitbare Inhalte. Dieser Inhalt kommt in einer Vielzahl von möglichen Typen (d. H. Boolesche Ankreuzfelder, Textfelder usw.). Das Problem ist, dass diese Werte entweder allein oder in einer Gruppe (bis zu 8) sein können, also kommen sie in Arrays. Wir binden diese Werte an eine ListView
und verwenden DataTemplates
, um sie anzuzeigen. Effektiv erstelle ich die ListView
aus einer Liste von Arrays.
Die Elemente in diesen Arrays müssen datengebunden und ordnungsgemäß formatiert sein (z. B. muss ein boolesches Array Kontrollkästchen erstellen, während ein Zeichenfolgenarray Textfelder benötigt). Jedes erstellte Element muss in eine Spalte in der ListView
eingefügt werden. Das aktuelle Styling verwendet DataTemplates
mit Datenbindung, dh
<DataTemplate x:Key="testTemplate2">
<TextBlock Text="{Binding Path=Value[0]}"
Margin="2"
HorizontalAlignment="Center"
VerticalAlignment="Center" />
</DataTemplate>
dies für jeden Wert in dem Eingangsfeld wiederholt wird, so dass man Value[1]
, Value[2]
usw.
Das bedeutet, fast den gleichen Code Wiederholen 8 Zeiten, und dann das Gleiche für den nächsten Typ. Da es eine große Anzahl von Eingabetypen gibt, bedeutet dies eine lächerliche Menge an wiederholtem Code.
Meine Frage ist: Gibt es eine bessere Möglichkeit, dies zu tun, so dass wir Datenvorlagen nicht wiederholen müssen, während Spalten verwenden?
Übrigens benutze ich .NET 3.5.
Beispiel, wie eine Zeile aussehen würde. Jedes Element würde in einer eigenen Spalte stehen. Die Comboboxen werden aus dem Array erstellt.
EDIT Beispiel Datatemplate:
<DataTemplate x:Key="textBoxTemplate2">
<TextBox Text="{Binding Path=Value[2], NotifyOnSourceUpdated=True, UpdateSourceTrigger=PropertyChanged}"
BorderBrush="{DynamicResource ComboBorder}"
Tag="{Binding Path=AllowedChars}"
PreviewTextInput="PreviewTextInputHandler"
DataObject.Pasting="PastingHandler"
ToolTip="{Binding Path=Title}"
Margin="2"
SourceUpdated="BindingSourceUpdated"
MaxLength="{Binding Path=DataLength}"
HorizontalAlignment="Stretch"
VerticalAlignment="Center" >
<TextBox.IsEnabled>
<MultiBinding Converter="{StaticResource isEnabledConverter}">
<Binding Path="IsLocked" Mode="OneWay" />
<Binding Path="IsVisible[2]" Mode="OneWay" />
</MultiBinding>
</TextBox.IsEnabled>
</TextBox>
</DataTemplate>
Beispiel Diagramm:
Ich habe ein Ansichtsmodell. Dieses ViewModel hat eine Liste, die aus ItemData besteht. Die Klasse ItemData hat ein Array namens Values. Die Liste ist an die Ansicht gebunden. Wir müssen entscheiden, was Datatemplate in Abhängigkeit davon, zu verwenden, was Eigenschaft ItemData wir Zugriff auf:
- One für den Namen
- Eines oder mehr für die Optionen arrray.
Aktuell zeigen wir die Liste in einer ListView an. Beim Generieren der ListView
haben die Spalten unterschiedliche DataTemplates
an ihre CellTemplate
s, eine pro Index, für insgesamt 8 DataTemplates.
Verwenden Sie ein ItemsControl mit 'ItemsSource = {Binding Values}'? – Clemens
Das habe ich gemeint. – Clemens
@MKII können Sie den Code von einigen anderen DataTemplates geben, die Sie definiert haben, wie ich sehen möchte, wie komplex sie sind/sein könnten? –