【发布时间】:2018-03-20 09:23:03
【问题描述】:
我正在学习 wpf 和绑定,我有一个 gridview 和一个自定义对象
我正在尝试将自定义对象列表绑定到网格我的自定义对象是这样设计的
Public class myObject
{
protected int myInt {get; set;}
protected ObservableCollection<string> myStrings{get;set;}
protected double myDouble{get;set}
public myObject(int aInt, string aString, double aDouble)
{
myStrings = new ObservableCollection<string>();
string[] substrings = aString.split('/');
this.myInt = aInt;
foreach (string s in substrings)
{
myStrings.Add(s);
}
this.myDouble = aDouble;
}
}
然后我创建这些对象的 observablecollection 并将它们绑定到网格
双精度整数在网格中显示得很好,但数组显示指针, 我有一列充满了
"System.Collections.ObjectModel.ObservableCollection `1[System.String]"
谁能帮我在网格中显示 observableCollection 的内容,例如,集合的每个项目都会得到一列。
提前致谢!
我找到的解决方案
我尝试使用模板,但它并不让我满意,所以我使用了 ExpandoObjects 我首先创建了一个字典列表,其中包含我未来网格的每一行,然后使用 https://theburningmonk.com/2011/05/idictionarystring-object-to-expandoobject-extension-method/ 将它们转换为 expando 对象非常感谢他出色的自定义方法
然后我只是将 ExpandoObjects 的可观察集合绑定到我的 radgridview 和 TADA 我现在有了我的动态网格和动态对象
再次感谢您的回答,我学到了一些关于模板的有用信息!
【问题讨论】:
-
计划如何运作?列标题应该是什么?如何处理不同大小的集合?我至少可以说,这不是开箱即用的。
-
您的 myStrings 集合中的所有 myObject 项的项数是否相同?
-
无关:建议关注C# naming conventions。
-
实际上,在这种情况下,double/int 和字符串都不能显示。您将它们标记为受保护。 WPF 绑定要求属性是“公共的”才能绑定到它们
-
它们实际上在我的代码中是公开的,只是认为这不适合封装,所以当我为这篇文章重写我的代码时,我让它们受到保护。但是阅读了你所有的 cmets,我意识到这不会奏效。我可以代替一个字符串数组声明尽可能多的字符串,这样可以解决问题,但我不会满意,我正在搜索动态对象,不知道这是否可以帮助我解决我的问题。
标签: c# wpf mvvm expandoobject dynamicobject