Ich bin ziemlich neu in WPF und versuche zu verstehen, wie man die ListBox
Kontrolle am besten erweitert. Als Lernerfahrung wollte ich eine ListBox
bauen, deren ListBoxItem
s eine CheckBox
anstelle von nur Text anzeigen. Ich habe das auf eine einfache Art und Weise mit der ListBox.ItemTemplate
funktioniert, die Namen der Eigenschaften, die ich zu Databind explizit festlegen wollte. Ein Beispiel dafür ist mehr als tausend Worte, so ...Wie man eine ListBox.ItemTemplate wiederverwendbar/generisch machen
ich ein benutzerdefiniertes Objekt für Datenbindung haben:
public class MyDataItem {
public bool Checked { get; set; }
public string DisplayName { get; set; }
public MyDataItem(bool isChecked, string displayName) {
Checked = isChecked;
DisplayName = displayName;
}
}
(. Ich baue eine Liste dieser und setzen ListBox.ItemsSource
dieser Liste) Und meine XAML sieht so aus:
<ListBox Name="listBox1">
<ListBox.ItemTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding Path=Checked}" Content="{Binding Path=DisplayName}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Das funktioniert. Aber ich möchte diese Vorlage wiederverwendbar machen, d. H. Ich möchte an andere Objekte mit anderen Eigenschaften als "Checked" und "DisplayName" binden. Wie kann ich meine Vorlage so ändern, dass ich sie zu einer Ressource machen, sie auf mehreren Instanzen ListBox
wiederverwenden und für jede Instanz IsChecked
und Content
an beliebige Eigenschaftsnamen binden kann?
Ich glaube nicht, dass das möglich ist. Um die "Checked" -Bindung flexibel zu gestalten, müssen Sie die ListBox ableiten und einen CheckedMemberPath wie den DisplayMemberPath hinzufügen. Kann das nicht mit nur einer Vorlage tun. –
Das war, wovor ich Angst hatte. Ich habe angefangen ListBox zu untersuchen, aber ich las weiter darüber, wie unglaublich Templates sind und wie man Unterklassen vermeiden sollte, wenn es überhaupt möglich ist, mit einer Vorlage das zu erreichen, was man will. Ich denke, das ist ein guter Fall für eine Unterklasse. Vielen Dank! –