簡體   English   中英

WPF 根據綁定值更改數據網格行的 PackIcon

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM