No se pudo encontrar una respuesta a esta.WPF - Establecer DataTemplate para GridViewColumns agregadas mediante programación
Tengo un control WPF ListView que puede contener un número variable de columnas. Por ejemplo, puede mostrar datos de clientes, mostrar columnas Id, Nombre, Correo electrónico, etc., o puede contener productos, mostrando ID, Nombre, Precio, NumberInStock, Fabricante, bueno, se entiende la idea: varía el número de columnas, los nombres varían.
Lo que quiero hacer es que ciertas columnas muestren los datos de forma diferente. Por ejemplo, en lugar de imprimir 'Sí' o 'No' como el valor de la columna NumberInStock, quiero mostrar una imagen nítida.
Si tuviera una cantidad fija de columnas, con nombres fijos para vincular, veo cómo es fácil. Simplemente defina un DataTemplate para esa columna en particular y lo usaría para definir la vista de mi columna. Sin embargo, no puedo ver cómo hacerlo en mi situación.
Soy muy nuevo en WPF, así que disculpe si mi enfoque es malo :-) En mi XAML, he definido un control ListView, que está prácticamente vacío. En mi código detrás, yo 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);
}
bien, estoy seguro de que esto se podría hacer un poco más bonito (si tiene algún consejo, por favor!) Pero el mayor problema es que no puedo ver ninguna diferencia en la columna. Simplemente muestra el valor de texto de la columna 'NumberInStock'. Mi DataTemplate se define en el 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>
Por supuesto, todavía tendría que añadir la funcionalidad que sería mostrar un 'sí' o 'no' de imagen en función del valor de NumberInStock, pero eso es un paso 2 realmente ¡Me encantaría ver una imagen y un borde rojo en mi ListView!
Gracias de antemano, Razzie
Gracias, eso se ve realmente como el problema. Ya edité mi código para usar un control DataGrid que viene con SP1. Puede ser más adecuado en mi situación de todos modos. Pero esta es definitivamente la solución correcta. ¡Muchas gracias! – Razzie