WPF C# 序列化保存设置


 ObservableCollection  listContent = new ObservableCollection<Msg>();

 

void testLoadConfigContent()

        {
            string file = "data.d";
            Msg[] obj;
            // 打开文件,并进行反序列化得到对象
            Stream stream = File.Open(file, FileMode.Open);
            BinaryFormatter  formatter = new BinaryFormatter();
            //formatter = new BinaryFormatter();
            obj = (Msg[])formatter.Deserialize(stream);
            stream.Close();
            listContent.Clear();
            foreach (Msg m in obj)
            {
                if (""+m.color == "") { m.color = "Green"; }
                if (m.isChecked)
                {
                    m.color = "Green";
                }
                else {
                    m.color = "Gray";
                }
                listContent.Add(m);
            }
        }
        void testSaveConfigContent()
        {
            string file = "data.d";
            int cnt = listView.Items.Count;//listView 是UI上的列表控件
            Msg[] obj = new Msg[cnt];
            for (int i = 0; i < cnt; i++)
            {
                obj[i] =listView.Items[i] as Msg ;/// new Msg() { isChecked = listView.Items[i] as , word = "test" + i };
            }
            // 创建一个文件,并将对象序列化后存储在其中
            Stream stream = File.Open(file, FileMode.Create);
            BinaryFormatter formatter = new BinaryFormatter();
            //BinaryFormatter formatter = new BinaryFormatter();
            formatter.Serialize(stream, obj);
            stream.Close();
            // 将对象置空
            obj = null;
        }
        
      }
        [Serializable]
        public class Msg
        {
            public string word { get; set; }
            public bool isChecked { get; set; }
            public string color { get; set; }
        }
}

 

 

 还有一种动态保存和载入UI 控件的办法

WPF使用XAML来描述用户界面,每个XAML元素往往对应着相应的WPF对象,元素的属性对应着对象的属性。
由于XAML元素与WPF对象之前存在着这种对应关系,其实可以将XAML代码看成是WPF对象“序列化”后的结果。
WPF提供了XamlWriter 和 XamlReader  两个类实现WPF对象的XAML序列化和反序列化。

 

 void testLoadUIConfig()
        {
            //using System.Windows.Markup;
            if (File.Exists("UI.dat"))
            {
                using (FileStream fs = new FileStream("UI.dat", FileMode.Open))
                {
                    //调用XamlReader的方法从文件流中重建listView对象
                    listView = System.Windows.Markup.XamlReader.Load(fs) as ListView;
                    gridContainer.Children.Clear();
                   gridContainer.Children.Add (listView);
                }
            }
        }
        void testSaveUIConfig()
        {
            using (FileStream fs = new FileStream("UI.dat", FileMode.Create))
            {
                //当需要保存当前图形时,调用XamlWriter的以下方法将listView对象直接序列化到文件流中
                System.Windows.Markup.XamlWriter.Save(listView, fs);
                MessageBox.Show("数据已保存");
            }
        }

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM