一个滚草的主要编辑,可以保持一个滚草...
如果我有客户,并为每一位客户数据的列表包含在字典哪能列表绑定到DataGrid使每串键是一列?
编辑:注:我知道这不是一个很好的方式来设计Customer类。
如
public class Customer{
public int Id{get;set;}
private Dictionary<string,string> values;
public Dictionary<string,string> Values{get {return values;}}
public Customer(int id){
this.Id = id;
values["Name"] = "Peter";
values["Age"] = 129.ToString();
values["HairColour"] = "See through!";
}
}
... 那天晚些时候...
var Customers = new List<Customer>(){
new Customer(1),
new Customer(2),
new Customer(3)
};
... 接着...
<DataGrid ItemsSource={Binding Path=Customers}/>
...期望的结果。
Id | Name | Age | HairColour
________________________
1 | Peter| 129 | See through!
________________________
2 | Peter| 129 | See through!
________________________
3 | Peter| 129 | See through!
________________________
在没有其他的建议这篇文章是最好的答案我可以想出。 在他的文章了Miron正在与来自web服务的XML数据,并将其转换成数据绑定反思生成的类型。
我可以按照自己的方法,并创建一个使用我的字典键,而不是XML节点作为源生成的类型的属性类型。 对于本来简单的应用程序,我要建就显得太沉重,但至少我可以了解反射API。
如果有谁在乎评论或仍然可以为我提供一个更好的解决方案,我将不胜感激。
或者,轻松上路...
public partial class Window2 : Window
{
public Window2()
{
InitializeComponent();
var a1 = new A();
a1["Name"] = "Jack";
a1["Age"] = "9";
var a2 = new A();
a2["Name"] = "Jill";
a2["Age"] = "7";
List<A> items = new List<A>() { a1, a2 };
this.DataBoundItems = items;
dg.DataContext = this;
}
public List<A> DataBoundItems { get; set; }
private void dg_DataContextChanged(
object sender,
DependencyPropertyChangedEventArgs e)
{
foreach (string key in DataBoundItems[0].Values.Keys)
{
var col = new DataGridTextColumn();
col.Header = key;
// bind to the indexer on the class
col.Binding = new Binding("[" + key + "]");
dg.Columns.Add(col);
}
}
}
public class A
{
private Dictionary<string, string> values = new Dictionary<string, string>();
public string this[string index]
{
get
{
return values[index];
}
set
{
values[index] = value;
}
}
public Dictionary<string, string> Values { get { return aValues; } }
}
我不明白您的客户类的设计。 更安全将是一个客户类,如下所示。 这也将作出有约束力容易得多。
public class Customer
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public HairColor HairColor { get; set; }
}
public enum HairColor
{
SeeThrough,
Black,
Brown,
Blond
}
如果原因是,这是因为这是你如何从数据库中获取它,然后再考虑你的类的模型和我的类作为视图模型,在视图模型类进行适当改造。
文章来源: How can/could/might you bind WPF DataGrid to a List of objects each with some values in a Dictionary?