[英]WPF Change the PackIcon of datagrid row depending on binding value
我正在嘗試完成此操作: 在 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>
使用與 Image 或 textblock 同一列上的其他轉換器相同的綁定(例如)有效,但使用 materialDesign:PackIcon 轉換器永遠不會被調用,因此圖標不會改變。 我綁定錯了嗎?
編輯:
已解決:未調用轉換器,將參考替換為:
<UserControl.Resources>
<local:NumberToIconConverter x:Key="NumberToIconConverter"/>
</UserControl.Resources>
轉換器使用答案,添加 DBNull 檢查以避免 Null 異常:
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();
}
}
我認為問題出在您將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;
}
}
這對我有用。 輸出:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.