【问题标题】:WPF ListView-GridView : bind imageWPF ListView-GridView:绑定图像
【发布时间】:2013-06-14 10:10:43
【问题描述】:

我正在开发桌面 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# 中将 ListView 列中的“a”和“b”字母替换为“a.png”和“b.png”?

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

【问题讨论】:

    标签: c# wpf image listview gridview


    【解决方案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);
    }
    

    【讨论】:

    • 谢谢,但它不起作用: displaymemberbinding 只显示 MyImageConverter 发送的路径;然而,全代码解决方案是要走的路,但我的问题是在代码隐藏中创建一个指向转换器的数据模板......
    • 好的,我知道了,完整答案见social.msdn.microsoft.com/Forums/en-US/wpf/thread/…
    猜你喜欢
    • 1970-01-01
    • 2012-05-14
    • 1970-01-01
    • 2014-10-31
    • 2015-01-20
    • 1970-01-01
    • 2017-06-06
    • 1970-01-01
    • 2016-09-23
    相关资源
    最近更新 更多