Список продолжает перезаписывать первый объект вместо добавления нового - PullRequest
0 голосов
/ 11 октября 2019

Я пытаюсь разработать приложение WPF, в котором пользователь может создавать объекты класса «Процесс», вводя имя объекта и атрибуты, а затем добавлять их в список процессов. Затем список сериализуется в документ XML с событием нажатия кнопки.

Планируется объявить несколько процессов (с атрибутами), добавить их в список и сохранить список в виде одного документа XML.

Однако команда «Добавить процесс в список» работает только для первого экземпляра объекта. Когда добавляется другой объект, он заменяет первый объект в списке и добавляет его копию вместо записи под ним.

Вот код:

Первый шаг, вводимя и атрибуты процесса:

    List<Process> PList = new List<Process>();
    Process Procx = new Process();
    List<Process.PParameter> Listnew = new List<Process.PParameter>(); 

    private void AddNewProcessBTN_Click(object sender, RoutedEventArgs e)
    {
        Process tempProc = new Process();     
        string tempPID = PIDTB.Text;
        tempProc.PID = Int32.Parse(PIDTB.Text);
        tempProc.PName = PNameTB.Text;
        tempProc.PType = PTypeTB.Text;
        string tempPstation = PIDTB.Text;
        tempProc.PStation = Int32.Parse(PStationTB.Text);
        DataGridXAML.Items.Add(tempProc);

        Procx.PID= Int32.Parse(PIDTB.Text);
        Procx.PName= PNameTB.Text;
        Procx.PType = PTypeTB.Text;
        Procx.PStation = Int32.Parse(PStationTB.Text);
    }

Шаг 2. Добавление «процесса» в список (где проблема)

    private void Add2ListBTN_Click(object sender, RoutedEventArgs e)
    {
        Process tempp = new Process();
        tempp = Procx;

        tempp.Ps = Listnew;

        PList.Add(tempp);          
    }

Шаг 3. Сериализация

    private void SerializeProcessBTN_Click(object sender, RoutedEventArgs e)
    {
        using (Stream serp2 = new FileStream(@"C:\Users\solda\CsharpData\Plist.xml", FileMode.Create,
        FileAccess.Write, FileShare.None))
        {
            XmlSerializer serializer2 = new XmlSerializer(typeof(List<Process>));
            serializer2.Serialize(serp2, PList);
        }
        PList = null;
    }    

Как мне это исправить? Шаг 2 кажется неправильным.

Полный код:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Xml;
using System.Xml.Linq;
using System.Runtime.Serialization.Formatters.Binary;
using System.Windows.Media.Media3D;
using System.Xml.Serialization;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace datagridT
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {                
    }      
    List<Process> PList = new List<Process>();
    Process Procx = new Process();
    List<Process.PParameter> Listnew = new List<Process.PParameter>();
    //Add new//
    private void AddNewProcessBTN_Click(object sender, RoutedEventArgs e)
    {
        Process tempProc = new Process();     
        string tempPID = PIDTB.Text;
        tempProc.PID = Int32.Parse(PIDTB.Text);
        tempProc.PName = PNameTB.Text;
        tempProc.PType = PTypeTB.Text;
        string tempPstation = PIDTB.Text;
        tempProc.PStation = Int32.Parse(PStationTB.Text);
        DataGridXAML.Items.Add(tempProc);

        Procx.PID= Int32.Parse(PIDTB.Text);
        Procx.PName= PNameTB.Text;
        Procx.PType = PTypeTB.Text;
        Procx.PStation = Int32.Parse(PStationTB.Text);
    }
    private void AddNewFeatureBTN_Click(object sender, RoutedEventArgs e)
    {
        Process.PParameter tempParam = new Process.PParameter();
        string tempFID = FeatureIDTB.Text;
        tempParam.FID = Int32.Parse(FeatureIDTB.Text);
        tempParam.FName = FeatureNameTB.Text;
        string tempFmax = FeatureFmaxTB.Text;
        tempParam.FMax = double.Parse(FeatureFmaxTB.Text);
        string tempFmin = FeatureFminTB.Text;
        tempParam.FMin = double.Parse(FeatureFminTB.Text);
        tempParam.FUnit = FeatureUnitTB.Text;
        Process.PParameter Paramx = new Process.PParameter();
        Paramx.FName = tempParam.FName;
        Paramx.FID = tempParam.FID;
        Paramx.FMax = tempParam.FMax;
        Paramx.FMin = tempParam.FMin;
        Paramx.FUnit = tempParam.FUnit;
        Listnew.Add(Paramx);
        ListB1.Items.Add(Paramx);
    }
    private void Add2ListBTN_Click(object sender, RoutedEventArgs e)
    {
        Process tempp = new Process();
        tempp = Procx;
        tempp.Ps = Listnew;
        PList.Add(tempp);

    }

    private void SerializeProcessBTN_Click(object sender, RoutedEventArgs e)
    {
        using (Stream serp2 = new FileStream(@"C:\Users\solda\CsharpData\Plist.xml", FileMode.Create,
        FileAccess.Write, FileShare.None))
        {
            XmlSerializer serializer2 = new XmlSerializer(typeof(List<Process>));
            serializer2.Serialize(serp2, PList);
        }
        PList = null;
    }
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...