我搜索了幾個小時,但無論是我的編程做法是錯誤的或我沒有正確的思想搜索動態模型...如何創建ObjectListView
地塊的時間前,我發現ObjectListView作爲一個很好的替代正常的ListView。我在當前項目中的問題:
我沒有靜態模型類。我有很多不同種類的物體。每種對象都有不同的屬性。在我的ObjectListView中,我想顯示對象的名稱及其屬性,每個給定類型的對象都有一行。 (對於一個樣的對象,屬性是相同的)
對於我ObjectListView的型號我嘗試以下小例子(使用「編號」和「TXT」作爲AspactName):
using System.Dynamic;
[...]
private void addItems()
{
dynamic expando = new ExpandoObject();
expando.num = 1;
expando.txt = "Element";
List<ExpandoObject> lst = new List<ExpandoObject>();
lst.Add(expando);
olv.SetObjects(lst);
}
ObjectListView添加一行但不顯示屬性num和txt的文本。
任何想法來解決這個問題?有沒有另一種方法來顯示List的元素(如Object.Attributes)作爲使用ObjectListView的列?
預先感謝您。
好的,謝謝克勞斯,在我的腦海裏按照你的想法和特殊對象和ObjectListView再次搜索向我指出AspectGetterDelegates
我找到了解決方案的第一次工作: 添加以下AspectGetter代表中,ObjectListView顯示了我dynamicaly生成的屬性的信息:
olv.GetColumn(0).AspectGetter = delegate (dynamic er) { return er.Nummer; };
olv.GetColumn(1).AspectGetter = delegate (dynamic er) { return er.Text; };
如果有人有同樣的問題,這裏有來自防爆設置和獲取屬性兩個有用的方法pandoObjects:
public static void AddProperty(ExpandoObject expando, string propertyName, object propertyValue)
{
var expandoDict = expando as IDictionary<string, object>;
if (expandoDict.ContainsKey(propertyName))
expandoDict[propertyName] = propertyValue;
else
expandoDict.Add(propertyName, propertyValue);
}
public static object GetProperty(ExpandoObject expando, string propertyName)
{
var expandoDict = expando as IDictionary<string, object>;
if (expandoDict.ContainsKey(propertyName))
return expandoDict[propertyName];
else
return null;
}
這看起來像一個不錯的選擇;至少有一點比我的解決方案更聰明;) – Daniel
今天我還剩下幾分鐘,並嘗試了你的解決方案。它工作得很好,性能甚至更好一些(使用〜6300值插入更快0.05秒)。代碼更清晰,所以這是解決這個問題的解決方案。非常感謝! – Daniel