Sono abbastanza nuovo per WPF e sto cercando di capire come estendere il controllo ListBox
. Come esperienza di apprendimento, ho voluto creare un ListBox
il cui ListBoxItem
s visualizza uno CheckBox
invece del solo testo. Ho capito che funziona in maniera elementare usando lo ListBox.ItemTemplate
, impostando esplicitamente i nomi delle proprietà che volevo fare con il database. Un esempio vale più di mille parole, quindi ...Come rendere ListBox.ItemTemplate riutilizzabile/generico
Ho un oggetto personalizzato per l'associazione dati:
public class MyDataItem {
public bool Checked { get; set; }
public string DisplayName { get; set; }
public MyDataItem(bool isChecked, string displayName) {
Checked = isChecked;
DisplayName = displayName;
}
}
(. Costruisco un elenco di quelli e impostare ListBox.ItemsSource
a quella lista) e il mio XAML assomiglia a questo:
<ListBox Name="listBox1">
<ListBox.ItemTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding Path=Checked}" Content="{Binding Path=DisplayName}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Questo funziona. Ma voglio rendere questo template riutilizzabile, cioè voglio legare ad altri oggetti con proprietà diverse da "Checked" e "DisplayName". Come posso modificare il mio modello in modo tale da renderlo una risorsa, riutilizzarlo su più istanze ListBox
e, per ogni istanza, associare IsChecked
e Content
a nomi di proprietà arbitrari?
Non credo sia possibile. Affinché l'associazione "verificata" sia flessibile, dovrai creare una sottoclasse di ListBox e aggiungere CheckedMemberPath come DisplayMemberPath. Non posso farlo solo con un modello. –
Ecco di cosa avevo paura. Avevo iniziato a esaminare la ListBox delle sottoclassi, ma continuavo a leggere cose su come sono incredibili i modelli e su come dovresti evitare le sottoclassi se è possibile realizzare ciò che vuoi con un modello. Immagino che questo potrebbe essere un buon caso per una sottoclasse. Grazie! –