Редактирование XML-datagrid в WPF и паттерн MVVM

376
18 августа 2017, 23:21

Добрый день, извините сразу, перелазил 720 страниц различной инфы не нашел, суть вопроса как работать с XML файлами, редактирование, добавление , сохранение, удаление в WPF c учетом патерна MVVM, или что для начала нужно почитать чтоб разобраться в этой теме. Понял что мне нужен datagrid, считать в него могу(это легко) , а вот как дальше

 `string sampleXmlFile = @"C:\Users\umut.koseali\Desktop\students.xml";
DataSet dataSet = new DataSet();
dataSet.ReadXml(sampleXmlFile);
DataView dataView = new DataView(dataSet.Tables[0]);
dataGrid1.ItemsSource = dataView`

Помогите плиз.

Это мой xml

`<?xml version="1.0" encoding="utf-8"?>
<Students>
  <Student Id="0">
    <FirstName>Robert</FirstName>
    <Last>Jarman</Last>
    <Age>21</Age>
    <Gender>0</Gender>
  </Student>
  <Student Id="1">
    <FirstName>Leona</FirstName>
    <Last>Menders</Last>
    <Age>20</Age>
    <Gender>1</Gender>
  </Student>
  <Student Id="2">
    <FirstName>Helen</FirstName>
    <Last>Wilson</Last>
    <Age>21</Age>
    <Gender>1</Gender>
  </Student>
  <Student Id="3">
    <FirstName>John</FirstName>
    <Last>Smith</Last>
    <Age>22</Age>
    <Gender>0</Gender>
  </Student>
  <Student Id="4">
    <FirstName>Алексей</FirstName>
    <Last>Дроздов</Last>
    <Age>19</Age>
    <Gender>0</Gender>
  </Student>
  <Student Id="5">
    <FirstName>Вадим</FirstName>
    <Last>Халтурин</Last>
    <Age>21</Age>
    <Gender>0</Gender>
  </Student>
  <Student Id="6">
    <FirstName>Анна</FirstName>
    <Last>Говорухина</Last>
    <Age>20</Age>
    <Gender>1</Gender>
  </Student>
  <Student Id="7">
    <FirstName>Александр</FirstName>
    <Last>Иванов</Last>
    <Age>20</Age>
    <Gender>0</Gender>
  </Student>
</Students>`

Как правильно вывести их в редактируемый список, с возможностью сохранения, добавления, редактирования информации?

Answer 1

Предлагаю отойти от DataTable, а использовать строго типизированные коллекции. Тогда порядок действий будет примерно следующим:

1. Определить базовый класс Student

public class Student
{
public int ID { get; set; }
public string FirstName { get; set; }
public string Last { get; set; }
public int Age { get; set; }
public bool Gender { get; set; }
}

2. Определить класс для чтения

public static class XmlReader
    {
        public static IEnumerable<Student> readStudents(string path)
        {
            var xd = XDocument.Load(path);
            foreach (var xe in xd.Root.Elements("Student"))
            {
                var id = (int)xe.Attribute("Id");
                var firstName = (string)xe.Element("FirstName");
                var lastName = (string)xe.Element("Last");
                var age = (int)xe.Element("Age");
                var gender = (string)xe.Element("Gender") != "0";
                yield return new Student
                {
                    ID = id,
                    Age = age,
                    FirstName = firstName,
                    Last = lastName,
                    Gender = gender
                };
            }
        }
}

3. Считать

var Data = XmlReader.readStudents(pathToFile).ToArray();
Answer 2

Если вы хотите использовать DataSet и DataGrid для редактирования данных в XML-источнике, то можете через DataSet и сохранить их

var sampleXmlFile = @"C:\Users\umut.koseali\Desktop\students.xml";
var stream = new FileStream(sampleXmlFile, FileMode.Open);
dataSet.WriteXml(stream, XmlWriteMode.IgnoreSchema);
stream.Close();
READ ALSO
Создание файлов COMTRADE в C# при помощи GSF.Comtrade

Создание файлов COMTRADE в C# при помощи GSF.Comtrade

Понимаю, что очень узконаправленный вопрос, однако офдокументация скупа на ответы

261
Конструктор классов

Конструктор классов

Например есть такой класс(к примеру)

194
DualListbox js как очищать

DualListbox js как очищать

как очищать DualListbox перед каждым открытием модального окна? у меня мои данные накапливаются сейчас

301