1

我正在开发桌面 WPF 应用程序(.net 4)。它的一个窗口包含 a tabControl,其tabitems包含每个 a Listview,其视图是 a GridView。TabItems、ListViews 和 GridViews 都是动态生成的。当用户点击每个 tabitem 上的按钮时,ListView 视图将使用 DataTable defaultview 更新SQL Server(当然,选定的行取决于用户的请求,但这在这里无关紧要)。

一切工作正常,下面的(缩短的)代码用于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# 中将 ListView 列中的“a”和“b”字母替换为“a.png”和“b.png”?

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

4

1 回答 1

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);
}
于 2013-06-14T11:03:42.430 回答