Impossibile trovare una risposta a questo.WPF - Imposta DataTemplate per GridViewColumns aggiunto al livello di programmazione
Ho un controllo ListView WPF che può contenere un numero variabile di colonne. Ad esempio, può visualizzare i dati dei clienti, visualizzando colonne Id, Nome, Email ecc, oppure può contenere prodotti, visualizzando ID, Nome, Prezzo, NumeroInchiostro, Produttore, beh, si ottiene l'idea: numero variabile di colonne, nomi diversi.
Quello che voglio fare è che alcune colonne visualizzino i dati in modo diverso. Ad esempio, invece di stampare "Sì" o "No" come valore della colonna NumberInStock, voglio visualizzare un'immagine nitida.
Se avessi una quantità fissa di colonne, con nomi fissi da associare, vedo un po 'com'è facile. Basta definire un DataTemplate per quella particolare colonna e lo userei per definire la vista della mia colonna. Tuttavia, non riesco a vedere come farlo nella mia situazione.
Sono molto nuovo a WPF, quindi scusami se il mio approccio è sbagliato :-) Nel mio XAML, ho definito un controllo ListView, che è praticamente vuoto. Nel mio codice dietro, io uso:
// get all columns from my objects (which can be either a Customer of Product)
foreach (string columnName in MyObject.Columns)
{
GridViewColumn column = new GridViewColumn();
// Bind to a property of my object
column.DisplayMemberBinding = new Binding("MyObject." + columnName);
column.Header = columnName;
column.Width = 50;
// If the columnname is number of stock, set the template to a specific datatemplate defined in XAML
if (columnName == "NumberInStock")
column.CellTemplate = (DataTemplate)FindResource("numberInStockImageTemplate");
explorerGrid.Columns.Add(column);
}
Ok, sono sicuro che questo potrebbe essere fatto un po 'più carina (se avete qualche consiglio, per favore!), Ma il problema più grande è che non riesco a vedere alcun differenza nella colonna. Visualizza solo il valore del testo della colonna 'NumberInStock'. Il mio DataTemplate viene definito nel XAML:
<Window.Resources>
<DataTemplate x:Name="NumberInStock" x:Key="NumberInStock">
<Border BorderBrush="Red" BorderThickness="2.0">
<DockPanel>
<Image Width="24" Height="24" Margin="3,0" Source="..\Images\instock.png" />
</DockPanel>
</Border>
</DataTemplate>
</Window.Resources>
Naturalmente, avrei ancora per aggiungere la funzionalità che sarebbe visualizzare un 'sì' o 'no' immagine a seconda del valore della NumberInStock, ma questo è il passo 2 davvero. Sarei felice di vedere un'immagine e un bordo rosso nel mio ListView!
Grazie in anticipo, Razzie
Grazie, sembra davvero il problema. Ho già modificato il mio codice per utilizzare un controllo DataGrid fornito con SP1. Potrebbe essere più adatto comunque nella mia situazione. Ma questa è sicuramente la soluzione giusta. Grazie molto! – Razzie