From e0b72976c15d99c2972d20925bf438c0c7055ad6 Mon Sep 17 00:00:00 2001
From: chr <chrry550@163.com>
Date: 星期五, 01 三月 2024 16:59:46 +0800
Subject: [PATCH] 新增序列化操作;

---
 WPFProject.csproj               |    1 
 Utils/XmlUtil.cs                |   41 ++++++++
 UI/Test/FunctionSetting.xaml.cs |    3 
 UI/Test/ProgramList.xaml        |    5 
 UI/Test/SequnceList.xaml        |    7 
 UI/Test/ProgramList.xaml.cs     |  172 ++++++++++++++++++----------------
 test.xml                        |   57 +++++++++++
 7 files changed, 195 insertions(+), 91 deletions(-)

diff --git a/UI/Test/FunctionSetting.xaml.cs b/UI/Test/FunctionSetting.xaml.cs
index 637c21d..eada342 100644
--- a/UI/Test/FunctionSetting.xaml.cs
+++ b/UI/Test/FunctionSetting.xaml.cs
@@ -15,6 +15,7 @@
 using System.Windows.Media.Imaging;
 using System.Windows.Navigation;
 using System.Windows.Shapes;
+using System.Xml.Serialization;
 using WPFProject.Models;
 using WPFProject.Utils;
 
@@ -45,7 +46,6 @@
         {
             DataContext = this;
             InitializeComponent();
-           
         }
 
         public DdDragHandler dragHandler { get; set; } = new DdDragHandler();
@@ -74,6 +74,5 @@
             get { return _FuncModels; }
             set => RaiseAndSetIfChanged(ref _FuncModels, value);
         }
-
     }
 }
diff --git a/UI/Test/ProgramList.xaml b/UI/Test/ProgramList.xaml
index 56d6444..8acb0ab 100644
--- a/UI/Test/ProgramList.xaml
+++ b/UI/Test/ProgramList.xaml
@@ -24,10 +24,7 @@
     <Grid>
         <ListView ItemsSource="{Binding Programs}" ItemContainerStyle="{StaticResource a}" 
                   VerticalContentAlignment="Center"
-                  dd:DragDrop.IsDragSource="True"
-                  dd:DragDrop.IsDropTarget="True"
-                  dd:DragDrop.ShowAlwaysDropTargetAdorner="True"
-                  dd:DragDrop.UseDefaultDragAdorner="True"
+        
                   SelectionChanged="ListView_SelectionChanged">
             <ListView.ItemTemplate>
                 <DataTemplate>
diff --git a/UI/Test/ProgramList.xaml.cs b/UI/Test/ProgramList.xaml.cs
index e2516e9..79c6d8c 100644
--- a/UI/Test/ProgramList.xaml.cs
+++ b/UI/Test/ProgramList.xaml.cs
@@ -1,82 +1,92 @@
-锘縰sing System;
-using System.Collections.ObjectModel;
-using System.ComponentModel;
-using System.Runtime.CompilerServices;
-using System.Windows.Controls;
-using WPFProject.Models;
-
-namespace WPFProject.UI.Test
-{
-    /// <summary>
-    /// ProgramList.xaml 鐨勪氦浜掗�昏緫
-    /// </summary>
-    public partial class ProgramList : UserControl, INotifyPropertyChanged
-    {
-        public virtual event PropertyChangedEventHandler PropertyChanged;
-
-        protected virtual void RaisePropertyChanged(string name)
-        {
-            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
-        }
-
-        protected void RaiseAndSetIfChanged<T>(ref T old, T @new, [CallerMemberName] string propertyName = null)
-        {
-            old = @new;
-            if (propertyName != null)
-            {
-                RaisePropertyChanged(propertyName);
-            }
-        }
-
-
-        private ObservableCollection<Program> _Programs = new ObservableCollection<Program> {
-
-            new Program{ Name="123",
-            Sequences = new ObservableCollection<Sequence>
-            {
-                new Sequence{ 
-                    Name="S123"
-                },
-                new Sequence
-                {
-                    Name="S223"
-                }
-            }
-            },
-            new Program{ Name="223",
-
-             Sequences = new ObservableCollection<Sequence>
-            {
-                new Sequence{
-                    Name="D123"
-                },
-                new Sequence
-                {
-                    Name="D223"
-                }
-            }
-            }
-        };
-        public ObservableCollection<Program> Programs
-        {
-            get { return _Programs; }
-            set => RaiseAndSetIfChanged(ref _Programs, value);
-        }
-
-        public ProgramList()
-        {
-            DataContext = this;
-            InitializeComponent();
-        }
-
-        public event EventHandler<Program> ProgramChanged;
-
-        private void ListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
-        {
+锘縰sing System;
+using System.Collections.ObjectModel;
+using System.ComponentModel;
+using System.IO;
+using System.Runtime.CompilerServices;
+using System.Windows.Controls;
+using System.Xml.Serialization;
+using WPFProject.Models;
+using WPFProject.Utils;
+
+namespace WPFProject.UI.Test
+{
+    /// <summary>
+    /// ProgramList.xaml 鐨勪氦浜掗�昏緫
+    /// </summary>
+    public partial class ProgramList : UserControl, INotifyPropertyChanged
+    {
+        public virtual event PropertyChangedEventHandler PropertyChanged;
+
+        protected virtual void RaisePropertyChanged(string name)
+        {
+            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
+        }
+
+        protected void RaiseAndSetIfChanged<T>(ref T old, T @new, [CallerMemberName] string propertyName = null)
+        {
+            old = @new;
+            if (propertyName != null)
+            {
+                RaisePropertyChanged(propertyName);
+            }
+        }
+
+
+        private ObservableCollection<Program> _Programs = new ObservableCollection<Program> {
+
+            new Program{ Name="123",
+            Sequences = new ObservableCollection<Sequence>
+            {
+                new Sequence{ 
+                    Name="S123"
+                },
+                new Sequence
+                {
+                    Name="S223"
+                }
+            }
+            },
+            new Program{ Name="223",
+
+             Sequences = new ObservableCollection<Sequence>
+            {
+                new Sequence{
+                    Name="D123"
+                },
+                new Sequence
+                {
+                    Name="D223"
+                }
+            }
+            }
+        };
+        public ObservableCollection<Program> Programs
+        {
+            get { return _Programs; }
+            set => RaiseAndSetIfChanged(ref _Programs, value);
+        }
+
+        public ProgramList()
+        {
+            DataContext = this;
+            InitializeComponent();
+        }
+
+        public event EventHandler<Program> ProgramChanged;
+
+        private void ListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
+        {
+            ttt();
             if (e.AddedItems.Count > 0)
-            {
-                ProgramChanged?.Invoke(this, e.AddedItems[0] as Program);
-            }
-        }
-    }
-}
+            {
+                ProgramChanged?.Invoke(this, e.AddedItems[0] as Program);
+            }
+        }
+
+        public void ttt()
+        {
+            string path = "X:\\vs\\WPFProject\\test.xml";
+            XmlUtil.SerialToFile(Programs, path);
+        }
+    }
+}
diff --git a/UI/Test/SequnceList.xaml b/UI/Test/SequnceList.xaml
index 38396cb..f541201 100644
--- a/UI/Test/SequnceList.xaml
+++ b/UI/Test/SequnceList.xaml
@@ -145,7 +145,6 @@
                 <Setter Property="hc:BorderElement.CornerRadius" Value="0" />
                 <Setter Property="RowHeight" Value="30"/>
             </Style>
-
         </ResourceDictionary>
     </UserControl.Resources>
     
@@ -157,9 +156,9 @@
         </Grid.ColumnDefinitions>
         <ListView ItemContainerStyle="{StaticResource a}" ItemsSource="{Binding Sequences}" BorderThickness="0"
                   dd:DragDrop.IsDragSource="True"
-                    dd:DragDrop.IsDropTarget="True"
-                    dd:DragDrop.ShowAlwaysDropTargetAdorner="True"
-                    dd:DragDrop.UseDefaultDragAdorner="True"
+                  dd:DragDrop.IsDropTarget="True"
+                  dd:DragDrop.ShowAlwaysDropTargetAdorner="True"
+                  dd:DragDrop.UseDefaultDragAdorner="True"
                   SelectionChanged="ListView_SelectionChanged">
 
             <ListView.ItemTemplate>
diff --git a/Utils/XmlUtil.cs b/Utils/XmlUtil.cs
new file mode 100644
index 0000000..5353449
--- /dev/null
+++ b/Utils/XmlUtil.cs
@@ -0,0 +1,41 @@
+锘縰sing System;
+using System.IO;
+using System.Xml.Serialization;
+
+namespace WPFProject.Utils
+{
+    public class XmlUtil
+    {
+        /// <summary>
+        /// 灏嗗璞″簭鍒楀寲鍒癤ml鏂囦欢涓�
+        /// </summary>
+        /// <param name="data">瀵硅薄</param>
+        /// <param name="filePath">xml璺緞</param>
+        public static void SerialToFile(object data, string filePath)
+        {
+            XmlSerializer serializer = new XmlSerializer(data.GetType());
+            string content = string.Empty;
+            //serialize
+            using (StringWriter writer = new StringWriter())
+            {
+                serializer.Serialize(writer, data);
+                content = writer.ToString();
+            }
+            //save to file
+            using (StreamWriter stream_writer = new StreamWriter(filePath))
+            {
+                stream_writer.Write(content);
+            }
+        }
+
+        public static T DeserialFromXml<T>(string filePath)
+        {
+            XmlSerializer serializer = new XmlSerializer(typeof(T));
+            using (StreamReader reader = new StreamReader(filePath))
+            {
+                return (T) serializer.Deserialize(reader);
+            }
+        }
+
+    }
+}
diff --git a/WPFProject.csproj b/WPFProject.csproj
index 3510247..a89c777 100644
--- a/WPFProject.csproj
+++ b/WPFProject.csproj
@@ -167,6 +167,7 @@
     <Compile Include="Utils\IPlugin.cs" />
     <Compile Include="Utils\Resize.cs" />
     <Compile Include="Utils\Win32Helper.cs" />
+    <Compile Include="Utils\XmlUtil.cs" />
     <Compile Include="ViewModels\ProgramListViewModel.cs" />
     <Page Include="Controls\InnerWindow.xaml">
       <SubType>Designer</SubType>
diff --git a/test.xml b/test.xml
new file mode 100644
index 0000000..353bc2a
--- /dev/null
+++ b/test.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="utf-16"?>
+<ArrayOfProgram xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+  <Program>
+    <Name>123</Name>
+    <Sequences>
+      <Sequence>
+        <Name>S123</Name>
+        <Steps>
+          <Step>
+            <Name>000</Name>
+          </Step>
+          <Step>
+            <Name>111</Name>
+          </Step>
+        </Steps>
+      </Sequence>
+      <Sequence>
+        <Name>S223</Name>
+        <Steps>
+          <Step>
+            <Name>000</Name>
+          </Step>
+          <Step>
+            <Name>111</Name>
+          </Step>
+        </Steps>
+      </Sequence>
+    </Sequences>
+  </Program>
+  <Program>
+    <Name>223</Name>
+    <Sequences>
+      <Sequence>
+        <Name>D123</Name>
+        <Steps>
+          <Step>
+            <Name>000</Name>
+          </Step>
+          <Step>
+            <Name>111</Name>
+          </Step>
+        </Steps>
+      </Sequence>
+      <Sequence>
+        <Name>D223</Name>
+        <Steps>
+          <Step>
+            <Name>000</Name>
+          </Step>
+          <Step>
+            <Name>111</Name>
+          </Step>
+        </Steps>
+      </Sequence>
+    </Sequences>
+  </Program>
+</ArrayOfProgram>
\ No newline at end of file

--
Gitblit v1.9.1