WPF:如何将反序列化的流直接绑定到我的数据网格上?

时间:2014-05-13 20:07:44

标签: c# wpf xaml datagrid

我能够从数据库中获取现有数据以加载到我的数据网格中,它可以正常工作。所有列表都绑定到数据网格上。但是,在一种情况下,我只需要将反序列化的流直接绑定到我的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并将其放入列表并将该列表传递给该属性后,对某些文件不起作用原因。

1 个答案:

答案 0 :(得分:0)

这是因为该方法是一种静态方法。它是一个非静态方法,我删除了声明的新列表,因为之前已经声明了属性。

所以我将此public static LotInformation DeserializedStream(string filePath)更改为:public void DeserializedStream(string filePath)