找不到答案。
我有一个WPF ListView控件,可以包含不同数量的列。例如,它可以显示客户数据,显示Id、Name、Email等列,或者它可以包含产品,显示ID、Name、Price、NumberInStock、Manufacturer等列,你懂的:列数和名称各不相同。
我的目标是让某些列以不同的方式显示数据。例如,我想在NumberInStock列中显示一个漂亮的图像,而不是打印'Yes'或'No'。
如果我有固定数量的列,并且有固定的名称进行绑定,我可以很容易地做到这一点。只需为该特定列定义一个DataTemplate,我将使用它来定义我的列的视图。但是,在我的情况下,我不知道如何做到这一点。
我非常新于WPF,所以请原谅我如果我的方法不好:-) 在我的XAML中,我定义了一个ListView控件,它几乎是空的。在我的代码后台,我使用:
// 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);
}
好的,我相信这可以更漂亮地完成(如果您有任何建议,请告诉我!),但最大的问题是我看不到列中的任何差异。它只显示“NumberInStock”列的文本值。我的DataTemplate在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>
当然,我仍需要添加功能,根据NumberInStock的值显示“是”或“否”的图像,但这实际上是第二步。 我很高兴在我的ListView中看到一个图像和红色边框!
提前致谢, Razzie