我能够从数据库中获取现有数据以加载到我的数据网格中,它可以正常工作。所有列表都绑定到数据网格上。但是,在一种情况下,我只需要将反序列化的流直接绑定到我的datagrids上。我尝试了类似于db的方法,但由于某种原因它没有用。我运行调试器,我绑定到单独的数据网格的两个列表都包含反序列化的流,因此它们不是空的。我想我错过了什么。
这就是我所做的:
public static LotInformation DeserializedStream(string filePath) {
XmlRootAttribute xRoot = new XmlRootAttribute();
xRoot.ElementName = "lot_information";
xRoot.IsNullable = false;
// Create an instance of lotinformation class.
var lot = new LotInformation();
// Create an instance of stream writer.
TextReader txtReader = new StreamReader(filePath);
// Create and instance of XmlSerializer class.
XmlSerializer xmlSerializer = new XmlSerializer(typeof(LotInformation), xRoot);
// DeSerialize from the StreamReader
lot = (LotInformation)xmlSerializer.Deserialize(txtReader);
LotInformation newList = new LotInformation();
List<Components> DeserialComponentsList = new List<Components>();
List<Families> DeserialFamiliesList = new List<Families>();
foreach (Components comp in lot.Components)
{
newList.Components.Add(comp);
Console.WriteLine(comp);
}
DeserialComponentsList = newList.Components.ToList();
foreach (Families fam in lot.Families)
{
newList.Families.Add(fam);
Console.WriteLine(fam);
}
DeserialFamiliesList = newList.Families.ToList();
Console.WriteLine(DeserialComponentsList.Count);
Console.WriteLine(" ");
Console.WriteLine(DeserialFamiliesList.Count);
// Close the stream reader
txtReader.Close();
return lot;
}
属性:
public List<Components> DeserialComponentsList
{
get {
return deserialComponentsList;
}
set {
deserialComponentsList = value;
RaisePropertyChanged("DeserialComponentsList");
}
}
public List<Families> DeserialFamiliesList
{
get
{
return deserialFamiliesList;
}
set
{
deserialFamiliesList = value;
RaisePropertyChanged("DeserialFamiliesList");
}
编辑:似乎属性不会因某种原因获取传递给他们的数据列表。在将反序列化的字符串添加到列表后,程序永远不会运行或到达属性。一些程序仅在视图首次打开时检测属性(属性为空),但在选择文件并获取该反序列化的xml并将其放入列表并将该列表传递给该属性后,对某些文件不起作用原因。
答案 0 :(得分:0)
这是因为该方法是一种静态方法。它是一个非静态方法,我删除了声明的新列表,因为之前已经声明了属性。
所以我将此public static LotInformation DeserializedStream(string filePath)
更改为:public void DeserializedStream(string filePath)
。