#c# #mvvm #xamarin.forms
#c# #mvvm #xamarin.forms
Вопрос:
Кажется, я не могу найти наилучшую практику или наилучший механизм структурирования и использования данных для моего приложения MVVM Xamarin form. Это может быть простым недопониманием того, как решить проблему, но я не уверен.
Я пытался использовать IEnumerable, IList и простой массив для многомерных данных (привязка?) но я довольно новичок в MVVM, поэтому, возможно, я неправильно подхожу к этому.
Это для Xamarin.Формирует приложение для Android, поэтому использование привязок данных типа MySQL не работает (поскольку вы не можете хранить в базе данных). Таким образом, использование этих классов данных является правильным способом, но я не знаю, как структурировать реляционные данные. На каждой ленте может быть МНОГО видеороликов, кнопок и другого содержимого.
Я просмотрел примеры Xamarin по этому вопросу, но ни один из них не адресует реляционные данные, поставляемые с приложением.
// Trying to use an aray
public IList<BeltContent> BeltContents { get; private set; }
public BeltData()
{
// Bringing it all together
BeltContents = new List<BeltContent>();
BeltContents.Add(new BeltContent
{
BeltName = "White",
VideoContent = {
"https://url-to-my-video01",
"https://url-to-my-video01" }
});
}
//Trying to use an IList to initialize inside
public IList<BeltContent> BeltContents { get; private set; }
public Ilist<VideoContent> VideoContents {get; private set; }
public BeltData()
{
// Bringing it all together
BeltContents = new List<BeltContent>();
VideoContents = new List<VideoContent>();
BeltContents.Add(new BeltContent
{
BeltName = "White",
VideoContent = VideoContents.Add(new VideoContent
{
VideoName = "SomeName",
VideoUri = "Https://some-url-to-video"
},
{
//etc
}
});
}
У меня также есть модели данных для этих
ПРИМЕЧАНИЕ: комментарии к BeltContent для других маршрутов, которые я пробовал.
Добавлено в качестве комментариев для консолидации кода
// The Data Model for videos (note they all follow this pattern)
public class VideoContent
{
public string VideoName { get; set; }
public string VideoUri { get; set; }
}
// Full content for the data model
public class BeltContent
{
public string BeltName { get; set; }
public string BeltDescription { get; set; }
// public IEnumerable<VideoContent> VideoContent {get; set;}
// public string[] VideoContent {get; set; }
// public IList<VideoContent> VideoContent {get; set;}
public VideoContent VideoContent {get; set; }
public ButtonResourceUri ButtonResourceUri { get; set; }
public WrittenContent WrittenContent { get; set; }
}
Я надеялся, что смогу использовать многомерный массив sort или IList для хранения вложенных данных.
Комментарии:
1. Я думаю, что ваш основной вопрос: «Как мне спроектировать свою модель данных?» Это довольно широкий вопрос, на который сложно ответить на SO. Есть ли какая-то конкретная часть дизайна, которая вызывает у вас проблемы? Тот факт, что это приложение Xamarin или MVVM, на самом деле не имеет отношения к дизайну вашей модели.
2. Я могу попытаться уточнить в приведенном выше вопросе, но я не уверен, как это описать. Я знаю, как создавать модели данных, я просто не знаю, как ссылаться и / или использовать и / или структурировать эти данные значимым образом, когда не используется SQL
3. «реляционные данные, поставляемые с приложением» — почему вы не предоставляете предварительно заполненную базу данных SQLite в своем приложении?
4. Я бы хотел это сделать, хотя в большинстве руководств и / или обсуждений по созданию баз данных SQLite не показано, как инициализировать их данными, например ASP.Net/MVC учебные пособия / документы делают. Я также, кажется, вспоминаю, что слышал, что вы не должны этого делать из-за простоты непосредственного чтения пользователем вашей базы данных
5. существует множество сторонних инструментов SQLite, которые вы можете использовать для создания баз данных и заполнения данными вручную или с помощью импорта. Google «sqlite manager»
Ответ №1:
Читая комментарии к вашему сообщению, я пытаюсь сделать слепой снимок…
Поскольку я был новичком в Xamarin (из Windows Forms и Server), это тоже было проблемой для меня. Как сохранить? Большие ORM не работают …?!
Это относительно просто — вы используете Xamarin с его собственными правилами. Существует множество решений проблем, связанных с Xamarin, я постараюсь показать свое стандартное решение.
- Создайте Xamarin-Project
- Создайте библиотеку классов (предпочтительнее в .Net Standard)
- Откройте диспетчер пакетов Nuget для библиотеки классов
- Получите пакет «SQLite-Net Extensions»
- Имя пакета: SQLiteNetExtensions
- Я не думаю, что вам нужны какие-то пакеты MVVM для SQLiteExtensions
- В этом блоге есть довольно хороший учебник о том, как инициализировать модель базы данных и как читать / записывать данные
- Исходная база данных должна быть скопирована как файл-включить> в каждый независимый от платформы проект
- С помощью PCLStorage или чего-то еще вы можете применить эту задачу, импортировав исходную базу данных в качестве источника ресурсов в ваше приложение xamarin и скопировав базу данных в нужное место.
Я всегда заканчиваю решением PCLStorage, как в этом gist
Один трюк с xamarin: попробуйте найти стандартные библиотеки .net, и вы должны (во многих случаях) иметь возможность использовать его на большинстве платформ xamarin.
Второе: следите за тем, чтобы readme-файлы открывались при импорте nuget!!! Это очень важно. Раньше я щелкал их и забывал почти каждую процедуру инициализации. Мне потребовались часы
В-третьих: существует множество nuget-библиотек, которые необходимо установить в базовом приложении и во всех приложениях, зависящих от платформы. Не забывайте, что в таких случаях, как SQLiteExtensions, будут установлены зависящие от платформы библиотеки.
(Ребята, не убивайте меня за это — я только пытаюсь помочь ;-))
Кстати: SQLiteExtensions использует IList или List … Если производительность является проблемой, вы можете переключиться на кэшированную ветку SQLiteExtensions позже (если вам нужно)
Комментарии:
1. Также в списке теперь EF Core
2. Пытался не упоминать EF Core, даже это может быть хорошим решением. Это должно показать быстрый способ разработки Xamarin с базами данных