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("數據已保存");
}
}