Я точно не знаю, что это такое, но эта ошибка говорит о том, что у вас нет источника данных в качестве источника элементов.
Что вдвойне верно.
Ваш ItemsSource не может быть датированным.
Если я пытаюсь установить источник данных для сетки данных равным единице, я получаю сообщение об ошибке:
Невозможно неявно преобразовать тип «System.Data.DataTable» в «System.Collections.IEnumerable». Существует явное преобразование (вам не хватает приведения?)
Так что я не знаю, что возвращает GetGokartlist (), но это не дата.
Вы могли бы использовать представление данных по умолчанию по умолчанию. Потому что это работает:
dg.ItemsSource = dt.DefaultView;
Если я тогда сделаю gettype, чтобы проверить, что это такое:
Type isType = dg.ItemsSource.GetType();
Это DataView, а не набор данных.
Может быть, вы могли бы привести к dataview и работать с этим. Но, может быть, это не то, что у вас есть в любом случае.
Но вы говорите, что объекты Gokart в списке.
Что звучит как список.
Таким образом, вы могли бы привести к списку
Но приведение некоторых данных к исходному интерфейсу, когда вы дали сетке данных, что данные в первую очередь, - необычный способ работы.
Более привычно работать с wpf, используя MVVM.
Как это:
https://social.technet.microsoft.com/wiki/contents/articles/32164.wpf-mvvm-step-by-step-2.aspx
С MVVM у вас будет модель представления, которая сохраняет ссылку на коллекцию GoKart. Обычно это будет наблюдаемая коллекция, а не список. Наблюдаемая коллекция поднимает коллекцию, измененную, когда вы добавляете или удаляете полезный элемент И сетка данных теряет некоторую функциональность, если вы привязываетесь к списку.
Во всяком случае, таким образом, у вас будет ссылка на сбор данных, и вы сможете работать с этим напрямую.
Как насчет XML из списка?
Зачастую это не единственное свойство, которое вы хотите сериализовать, а целая нагрузка.
Вы можете создать класс, имеющий одно свойство, List и заполнить его из вашей наблюдаемой коллекции, используя Linq и .ToList ().
Затем вы просто сериализуете этот класс и получаете все свои данные в формате xml.
Просто сделайте ваш класс общедоступным, свойства общедоступными и используйте datacontractserialiser.
Вот пример кода, который сериализуется на диск и десериализуется обратно:
public static void SaveScenario(string fileURL, Scenario scenario)
{
scenario.ScenarioFile = fileURL;
using (FileStream writer = new FileStream(fileURL, FileMode.Create))
{
DataContractSerializer ser = new DataContractSerializer(typeof(Scenario));
ser.WriteObject(writer, scenario);
}
}
public static Scenario ReadScenario(string fileURL)
{
FileStream fs = new FileStream(fileURL, FileMode.Open);
XmlDictionaryReader reader = XmlDictionaryReader.CreateTextReader(fs, new XmlDictionaryReaderQuotas());
DataContractSerializer ser = new DataContractSerializer(typeof(Scenario));
Scenario deserializedScenario = (Scenario)ser.ReadObject(reader, true);
reader.Close();
fs.Close();
return deserializedScenario;
}
}