在 WPF 中保存动态创建的对象

Posted

技术标签:

【中文标题】在 WPF 中保存动态创建的对象【英文标题】:Saving dynamically created objects in WPF 【发布时间】:2012-07-29 16:14:15 【问题描述】:

在我的 WPF 应用程序中,我向用户展示了一个表单,用户填写的表单大约是,例如一个位置。然后使用这些表单条目从自定义类构造一个对象,并在下一个视图中显示有关输入位置的详细信息。

我需要的是一种能够保存动态创建的对象的方法,这样当应用程序关闭并重新打开时,我可以显示以前输入的对象的名称属性,以便用户可以重新打开以前输入的对象中的数据。

我认为我可以将它们序列化为 .osl 文件,但这只会保存公共值。 所以我想一定有一个更简单的方法

任何帮助表示赞赏!

【问题讨论】:

【参考方案1】:

了解.Net Serialization

 [Serializable]
    class Person
    
        public int Age  get; set; 
        public string Name  get; set; 
    
    [Serializable]
    class Address
    
        public string City  get; set; 
    



static public void SerializeToXML(Person p, Address add)
        
            IFormatter formatter = new BinaryFormatter();
            using (FileStream stream = new FileStream(@"C:\data.xml", FileMode.Create, FileAccess.Write, FileShare.None))
            
                formatter.Serialize(stream, p);
                formatter.Serialize(stream, add);
            
        
        static void DeserializeFromXML()
        
            IFormatter formatter = new BinaryFormatter();
            using (FileStream stream = new FileStream(@"C:\data.xml", FileMode.Open, FileAccess.Read, FileShare.None))
            

                Person p = (Person)formatter.Deserialize(stream);
                Address add = (Address)formatter.Deserialize(stream);
            
        

用途:

Person p = new Person  Age = 23, Name = "Ram" ;
            Address add = new Address  City = "Khurja,India" ;
            SerializeToXML(p, add);
            DeserializeFromXML();

这样你就可以序列化/反序列化你想要的任何东西。

【讨论】:

很好的答案,我已经让它完美地工作了。尽管您知道是否可以使用此方法将多个对象保存到文件中并能够将它们反序列化回单独的对象?由于当前方法只是每次都简单地覆盖 xml 文件。而且我知道我可以使用 StreamWriter 简单地添加到 xml 文件中,但是正如我所说的那样,反序列化回单独的对象就成了一个问题。

以上是关于在 WPF 中保存动态创建的对象的主要内容,如果未能解决你的问题,请参考以下文章

WPF MvvM DataGrid 动态列

在WPF ListView中动态创建组

无法在WPF中动态创建列/行

WPF 中动态创建和删除控件

如何在WPF中动态创建布局(MVVM模式)

wpf treeview中动态创建的treeViewItem如何用右键触发菜单?