WPF ListView-GridView:绑定图像

时间:2013-06-14 10:10:43

标签: c# wpf image listview gridview

我正在使用桌面WPF应用(.net 4)。其中一个窗口包含tabControl,其tabitems包含Listview,其视图为GridView。 TabItems,ListViews和GridViews都是动态生成的。当用户点击每个tabitem上的按钮时,ListView视图将使用SQL Server的DataTable默认视图进行更新(当然,所选行取决于用户的请求,但这与此无关)。

一切正常,下面的(缩短的)代码动态生成GridView(gv):

foreach (KeyValuePair<string, string> Column in Columns)
{
    GridViewColumn gvc = new GridViewColumn();
    gvc.DisplayMemberBinding = new Binding(Column.Key);
    gv.Columns.Add(gvc);
}

正如您所看到的,我创建了一个字典,其列名与从SQL Server接收的DataTable的列相匹配(我使用Column.Value作为特殊用途,在这里也无关紧要。)

我的问题是“简单”:

其中一列包含我想要显示为徽标的值;显然,SQL服务器列包含字符串(比方说,“a”或“b”),我有名为“a.png”和“b.png”的图像(我可以动态显示,如testimage.Source = new BitmapImage(new Uri("../../images/a.png", UriKind.Relative))) 。

那么,我怎样才能在c#中用“a.png”和“b.png”替换我的ListView列中的“a”和“b”字母?

我希望我很清楚,并且已经感谢每个愿意花时间阅读并试图回答我问题的人。

1 个答案:

答案 0 :(得分:1)

您可以为此

使用数据绑定ValueConverter

您的转换器类 -

    public class MyImageConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            string imageName = (string) value;
            return new BitmapImage(new Uri("../../images/" + imageName + ".png", UriKind.Relative));
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }

在您的代码隐藏

foreach (KeyValuePair<string, string> Column in Columns)
{
    GridViewColumn gvc = new GridViewColumn();
    Binding binding = new Binding(Column.Key);
    if (Column.Key == "Image")
    {
        binding.Converter = new MyImageConverter();
    }
    gvc.DisplayMemberBinding = binding;
    gv.Columns.Add(gvc);
}