【问题标题】:WPF: How can I bind my deserialized stream directly onto my datagrid?WPF:如何将我的反序列化流直接绑定到我的数据网格上?
【发布时间】:2014-05-13 20:07:43
【问题描述】:

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

【问题讨论】:

    标签: c# wpf xaml datagrid


    【解决方案1】:

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

    所以我把这个public static LotInformation DeserializedStream(string filePath)改成了这个:public void DeserializedStream(string filePath)

    【讨论】:

      猜你喜欢
      • 2011-05-28
      • 1970-01-01
      • 1970-01-01
      • 2011-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-21
      • 1970-01-01
      相关资源
      最近更新 更多