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