chr
2024-03-01 e0b72976c15d99c2972d20925bf438c0c7055ad6
新增序列化操作;
5个文件已修改
2个文件已添加
286 ■■■■■ 已修改文件
UI/Test/FunctionSetting.xaml.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI/Test/ProgramList.xaml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI/Test/ProgramList.xaml.cs 172 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI/Test/SequnceList.xaml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Utils/XmlUtil.cs 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WPFProject.csproj 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
test.xml 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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);
        }
    }
}
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>
UI/Test/ProgramList.xaml.cs
@@ -1,82 +1,92 @@
using 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)
        {
using 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);
        }
    }
}
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>
Utils/XmlUtil.cs
New file
@@ -0,0 +1,41 @@
using System;
using System.IO;
using System.Xml.Serialization;
namespace WPFProject.Utils
{
    public class XmlUtil
    {
        /// <summary>
        /// 将对象序列化到Xml文件中
        /// </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);
            }
        }
    }
}
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>
test.xml
New file
@@ -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>