我正试图实现这一目标:Add a Image in the DataGridTemplateColumn,但不是使用图像,而是使用materialDesign:PackIcon。这是我的密码。
<DataGridTemplateColumn Header="Message">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<materialDesign:PackIcon Kind="{Binding MsgStatus,Converter={StaticResource NumberToIconConverter}}" Foreground="Green"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>MsgStatus是列值,根据其值,图标将是不同的。这是通过一个转换器实现的,它返回IconKind。
public class NumberToIconConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
string input = value as string;
switch (input)
{
case "1":
return MaterialDesignThemes.Wpf.PackIconKind.Alarm;
case "2":
return MaterialDesignThemes.Wpf.PackIconKind.Message;
default:
return DependencyProperty.UnsetValue;
}
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotSupportedException();
}
}转换器在用户控件中被引用,但它似乎从未被调用过,并且在调试或执行过程中没有错误。
<UserControl.Resources>
<local:NameToBrushConverter x:Key="NumberToIconConverter"/>
</UserControl.Resources>在同一列的图像或文本块上使用与其他转换器相同的绑定(例如)使用materialDesign:PackIcon,转换器永远不会被调用,因此图标不会改变。我的装订错了吗?
编辑:
解决方法:未调用转换器,将引用替换为:
<UserControl.Resources>
<local:NumberToIconConverter x:Key="NumberToIconConverter"/>
</UserControl.Resources>转换器使用应答,添加了DBNull检查以避免空异常:
public class NumberToIconConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value == DBNull.Value)
{
return DependencyProperty.UnsetValue;
}
var input = System.Convert.ToInt16(value);
switch (input)
{
case 1:
return MaterialDesignThemes.Wpf.PackIconKind.Alarm;
case 2:
return MaterialDesignThemes.Wpf.PackIconKind.Message;
default:
return DependencyProperty.UnsetValue;
}
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotSupportedException();
}
}发布于 2019-09-08 04:37:37
我认为问题在于你的转换器,你把int转换成string。我用您的代码和这个模型创建了一个示例项目:
public class Messages
{
public int MsgStatus { get; set; }
}我将您的转换改为这个(参见第2行):
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var input = System.Convert.ToInt16(value);
switch (input)
{
case 1:
return MaterialDesignThemes.Wpf.PackIconKind.Alarm;
case 2:
return MaterialDesignThemes.Wpf.PackIconKind.Message;
default:
return DependencyProperty.UnsetValue;
}
}这是我的工作。输出:

https://stackoverflow.com/questions/57838595
复制相似问题