在创建一个从ObservableCollection
文件中一般添加到XML
的方法时,每个记录都是最后一个记录。
我需要将多个XML
文件加载到多个ObservableCollection
中。这很简单,但这些ObservableCollection
基于多个Classes
以及更多内容会被添加,更不用说对现有Classes
的更改必须反映在阅读XML
个文件。所以我认为有一个返回泛型ObservableCollection<object>
的方法可以解决这个问题。当调用该方法时,Class
的{{1}}会抛出类似的内容;
ObservableCollection
然后在每个XElement的方法中,我将每个属性设置为这样;
MyClass c = new MyClass();
GetXMLData(c);
这种作品但确实存在问题。由于我在数据上投放数据,每个记录tableData都是最后读取的记录。
说XML数据如下所示:
public ObservableCollection<object> GetXMLData(object value)
{
string fName = "MyPath";
ObservableCollection<object> tableData = new ObservableCollection<object>();
FileStream fs = new FileStream(fName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
{
XDocument fileXML = XDocument.Load(fs);
var dataXML =
from x in fileXML.Descendants("MyData")
select x;
foreach (XElement x in dataXML)
{
var data = (object)value;
foreach (var prop in value.GetType().GetProperties())
{
PropertyInfo propertyInfo = data.GetType().GetProperty(prop.Name);
propertyInfo.SetValue(data, Convert.ChangeType(x.Attribute(prop.Name).Value, propertyInfo.PropertyType), null);
}
tableData.Add(data);
}
}
return tableData;
}
如果你看<Item Field1="Bob" Field2="10" />
<Item Field1="Mike" Field2="20" />
<Item Field1="Sam" Field2="30" />
,你会看到:
ObservableCollection<object>
而不是看到这个:
Field1="Sam", Field2="30"
Field1="Sam", Field2="30"
Field1="Sam", Field2="30"
注意:
编辑:试图澄清我的问题。对不起想要展示我不仅仅是“嘿你是怎么做到的?”
答案 0 :(得分:1)
嗯......循环中data
的所有实例实际上都是对value
的引用。他们不是&#34;新&#34;对象。所以,你在每个循环中所做的是改变value
的属性,我确定这不是你想要的。如果你Debug.WriteLine(value)
,在每次迭代中,你都会看到我的意思。因此,所有三个data
实例和value
将始终相同。如果您知道value
的类型,则应创建新实例,并相应地设置它的属性。假设您的类型具有非参数公共构造函数:
var data = Activator.CreateInstance( value.GetType() );
...会让你开始。