Ich habe eine dynamisch generierte ListView, die Datenbindung verwendet, um einige Werte über CheckBox zu bearbeiten. Ich benutze eine IValueConverter zu den Spalten der Listview zu erzeugen (wie in this Antwort):CheckBox als ein Label gerendert
public object Convert (object Value, Type EntryType, object Parameter, System.Globalization.CultureInfo Culture)
{
var Config = Value as ColumnConfig;
if (Config != null)
{
var GridView = new GridView();
Binding NameBinding = new Binding ("Name");
GridViewColumn BaseColumn = new GridViewColumn { Header = "Settings",
DisplayMemberBinding = NameBinding,
Width = 125,
CellTemplate = new DataTemplate()};
GridView.Columns.Add (BaseColumn);
foreach (Column CurrentColumn in Config.Columns)
{
Binding NewBinding = new Binding (CurrentColumn.DataField);
FrameworkElementFactory FEF = new FrameworkElementFactory (typeof (CheckBox));
FEF.SetBinding (CheckBox.IsCheckedProperty, NewBinding);
GridViewColumn GVColumn = new GridViewColumn
{
Header = CurrentColumn.Header,
DisplayMemberBinding = NewBinding
};
var DTemplate = new DataTemplate();
DTemplate.VisualTree = FEF;
GVColumn.CellTemplate = DTemplate;
GridView.Columns.Add (GVColumn);
}
return GridView;
}
return Binding.DoNothing;
}
, die wie so in der XAML verwendet wird:
<ListView Margin="2" ItemContainerStyle="{StaticResource LineHighlightListView}"
ItemsSource="{Binding InMatrixList}"
View="{Binding InMatrixColumns, Converter={StaticResource ConvertItemsToDynamicGridView}}" />
den Spalten Header werden an anderer Stelle erzeugt. Der Code sollte eine ColumnConfig
Elemente aufnehmen und GridViewColumn
Objekte erstellen, die eine ChechBox
Datenverbindung zu einem anderen Wert an anderer Stelle haben. Alles, was ich bekomme, sind jedoch Spalten mit Text anstelle der CheckBoxen. Der Text ist korrekt, daher ist die Datenbindung gültig, aber das Objekt FrameworkElementFactory
funktioniert nicht wie erwartet.
Warum werden die Kontrollkästchen in Textboxen gerendert/konvertiert?
Dies ist eine wirklich schlechte Art, es zu tun. Verwenden Sie stattdessen MVVM und Datenvorlagen –
@Glen Thomas Ich verwende bereits MVVM. Ich denke nicht, dass es eine Möglichkeit gibt, dies mit DataTemplates richtig zu machen, oder? Das DataTemplate würde für alle Zellen gelten, einschließlich der ersten Spalte, die nur Text enthält. – MKII
Fühlst du dich wie ein Kaninchenloch? Weil du ein Kaninchenloch durchgehst. Erstellen Sie ein benutzerdefiniertes Steuerelement oder eine Benutzersteuerung, die die Benutzeroberfläche im Codebehind basierend auf dem Status der Objekte bearbeitet, an die sie gebunden ist. – Will