【发布时间】:2016-05-15 10:04:10
【问题描述】:
我想使用来自ExpandoObject 的数据添加一行,这类似于Dictionary<string, object>。 string 是列的标题,object 的值是列的值。
每次,当我获得新数据时,我都会创建一个新的GridView,因为列数可能不同。在List myItems 中,我想在我的视图中显示所有行Dictionary<string, object>。
这就是我将列添加到视图中的方式:
List<Column> columns = new List<Column>();
myItemValues = (IDictionary<string, object>)myItems[0];
// Key is the column, value is the value
foreach (var pair in myItemValues)
{
Column column = new Column();
column.Title = pair.Key;
column.SourceField = pair.Key;
columns.Add(column);
}
view.Columns.Clear();
foreach (var column in columns)
{
Binding binding = new Binding(column.SourceField);
if (column.SourceField == "Icon")
{
view.Columns.Add(new GridViewColumn
{
Header = column.Title,
DisplayMemberBinding = binding,
CellTemplate = new DataTemplate(typeof(Image))
});
}
else
{
view.Columns.Add(new GridViewColumn { Header = column.Title, DisplayMemberBinding = binding });
}
}
在此之后我尝试添加行:
foreach (dynamic item in myItems)
{
this.listView.Items.Add(item);
}
我出于其他目的尝试修改此solution。这个解决方案效果很好,如果我只想添加string 类型的值,但现在我还想在gridview 中显示image,但如果我在gridview 中添加一个,它只会显示:
“System.Windows.Controls.Image”
现在我想知道,我是否可以修改我的代码,以便我可以在 gridview 中显示任何类型(或至少 images 和 strings),或者我是否必须使用全新的方式?怎么走?
编辑:在以前的方法中,据说我需要创建一个新的DataTemplate 来显示图像,但是没有解决方案(Solution 1,Solution 2)我发现对我有用。
【问题讨论】:
-
尝试根据您创建列的循环中的数据类型为列设置
CellTemplate。这是为了防止一列总是显示相同类型的数据。如果数据类型可以逐行更改,您可以添加CellTemplateSelector,以便使用正确的模板。 -
我创建了一个新的
DataTemplate并将DataType设置为typeof(Image)。我必须设置更多属性吗?因为我仍然得到相同的结果。 -
我尝试了这些解决方案来创建 DataTemplate:stackoverflow.com/questions/248362/… 和 stackoverflow.com/questions/5471405/…,但它们都不适合我。那么如何创建一个在
gridview中提供images的DataTemplate?