我正在使用桌面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”字母?
我希望我很清楚,并且已经感谢每个愿意花时间阅读并试图回答我问题的人。
答案 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);
}