我想使用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);
}
我tryed修改此solution用于其他目的。这个解决方案工作得很好,如果我只想要添加的类型string
的值,但现在我也想显示在GridView的image
,但如果我添加一个到我的GridView控件,它显示我只是:
“System.Windows.Controls.Image”
现在我想知道,如果我可以修改我的代码,这样我可以显示在GridView任何类型的(或至少images
和strings
)还是我使用完全新的方式,将是方式?
编辑:在以前的办法,有人说,我需要创建一个新的DataTemplate
显示的图像,但没有解决方案(Solution 1,Solution 2)我发现为我工作。
尝试设置'铈根据循环中创建列的数据类型,使用“llTemplate”作为列。这是为了防止一列总是显示相同类型的数据。 如果数据的类型可能因行而改变,您可以添加'CellTemplateSelector',以便使用正确的模板。 – Shadowed
我创建了一个新的'DataTemplate'并将'DataType'设置为'typeof(Image)'。我必须设置更多属性吗?因为我仍然得到相同的结果。 – daniel59
我尝试了这些解决方案来创建DataTemplate:http://stackoverflow.com/questions/248362/how-do-i-build-a-datatemplate-in-c-sharp-code和http://stackoverflow.com/questions/5471405/create-datatemplate-in-code-behind但它们都不适用于我。那么如何创建一个在'gridview'中提供'images'的'DataTemplate'? – daniel59