我有一个实现 ListView 的 WPF 应用程序。我想根据行所代表的数据类型在其中一列中显示图像(一个小图标)。有点像您在 Windows 资源管理器中看到的显示。
我在 XAML 的其他地方使用 DataTriggers,似乎可以使用类似的方法来换出整个单元格内容,但我找不到任何人这样做的示例。
有什么想法吗?
我有一个实现 ListView 的 WPF 应用程序。我想根据行所代表的数据类型在其中一列中显示图像(一个小图标)。有点像您在 Windows 资源管理器中看到的显示。
我在 XAML 的其他地方使用 DataTriggers,似乎可以使用类似的方法来换出整个单元格内容,但我找不到任何人这样做的示例。
有什么想法吗?
为此,有三种常用技术。
1)数据触发器:
<DataTemplate x:Key="ImageColumn">
<Grid>
<Image x:Name="img" Source="MyImage.png"/>
<Rectangle x:Name="rect" Fill="Red" Visibility="Hidden"/>
</Grid>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding TriggerProperty}" Value="2">
<Setter TargetName="rect" Property="Visibility" Value="Visible"/>
<Setter TargetName="img" Property="Visibility" Value="Hidden"/>
</DataTrigger>
<!--etc...-->
</DataTemplate.Triggers>
</DataTemplate>
2)价值转换器:
public class MyConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
string strVal = value as string;
switch (strVal)
{
case "2":
Rectangle rect = new Rectangle();
rect.Fill = Brushes.Red;
return rect;
default:
Image img = new Image();
ImageSourceConverter s = new ImageSourceConverter();
img.Source = (ImageSource)s.ConvertFromString("MyImage.png");
return img;
}
}
}
3)MVVM(模型-视图-视图模型):
创建一个包装数据模型的 ViewModel 类。此 ViewModel 将评估数据模型中的属性并将它们与逻辑组合成一个新属性。
public UIElement Icon
{
get
{
if (TriggerProperty == "2")
{
Rectange rect = new Rectangle();
rect.Fill = Brushes.Red;
return rect;
}
else
{
Image img = new Image();
ImageSourceConverter s = new ImageSourceConverter();
img.Source = (ImageSource)s.ConvertFromString("MyImage.png");
return img;
}
}
}
和 XAML:
<DataTemplate x:Key="ImageColumn">
<ContentControl Content="{Binding Icon}"/>
</DataTemplate>
过去,我使用ValueConverters来提供我想要显示的图像,但是我对为此目的使用 DataTriggers 的可能性很感兴趣。
Beatriz Stollnitz在这里发布了一个类似问题的解决方案。