Xamarin MVVM Fill Model со свойством Model - PullRequest
0 голосов
/ 28 февраля 2020

Как работать с моделью со свойством модели внутри нее?

Я успешно извлекаю информацию из API, но она не работает после того, как я пытаюсь изменить свою модель с int на модель, как показано ниже:

public class TypeModel
{
    [PrimaryKey]
    public int pType { get; set; }

    public DepartmentModel fDepartment { get; set; }

    public string Title { get; set; }

    public string Description { get; set; }

    public string Comments { get; set; }

    public string Version { get; set; }

}

Вот модель отдела

public class DepartmentModel
{

    public int pDepartment { get; set; }

    public string Name { get; set; }

}

Мой ViewModel имел этот код и работал. Я пытался внести изменения, так как я думаю, что мне нужно как-то изменить это здесь.

        Types.Clear();

        IEnumerable<TypesModel> types = await DataSource.GetTypesAsync(typeinfo.pType, true);

        foreach (var column in types)
        {
            Types.Add(column);
        }

Вот десериализация из API.

IEnumerable<TypeModel> TypeEnumerator;

public async Task<IEnumerable<TypeModel>> GetTypesAsync(bool r = false)
        {
            if (r)
            {
                var j = await HttpConstructor.GetStringAsync($"api/gettypes");
                return await Task.Run(() => JsonConvert.DeserializeObject<IEnumerable<TypeModel>>(j));

            }

            return TypeEnumerator; ;
        }

Вот json информация, полученная из API для типов

  {
    "pType": 10,
    "fDepartment": 1,
    "title": "Bigwig",
    "description": "For the bigwigs",
    "comments": "high priority",
    "version": "1.2.3"
  },
  {
    "pType": 11,
    "fDepartment": 1,
    "title": "Frontdesk",
    "description": "front end people",
    "comments": "none",
    "version": "1.2.4"
  }

Ответы [ 2 ]

0 голосов
/ 03 марта 2020

Получил решение, используя коллекцию Dictionary, избегая настройки модели и путаницы бизнес-логики c во всем приложении.

Я сохранил исходную модель и создал новую для использования TypesModel для использования для представлений списка.

   public class TypesModel
        {
            [PrimaryKey]
            public int pType { get; set; }

            public Dictionary<int, string> fDepartment { get; set; }

            public string Title { get; set; }

            public string Description { get; set; }

            public string Comments { get; set; }

            public string Version { get; set; }

        }

Затем я использовал Linq join для объединения информации, а также для заполнения значений словаря.

    var query = from t in types
                            join d in departments
                            on t.fDeparment equals d.pDepartment
                            select new TypesModel
                            {
                                pType = t.pType,
                                fDepartment = new Dictionary<int, string>()
                                {
                                    { d.pDepartment, d.Name }
                                },  
                                Title = t.Title,
                                Description = t.Description


                            };
0 голосов
/ 28 февраля 2020

это то, что я бы сделал. Есть, несомненно, другие способы подойти к нему

public class TypeModel
{
    [PrimaryKey]
    public int pType { get; set; }
    public int fDepartment { get; set; }
    public DepartmentModel Department { get; set; }
    public string Title { get; set; }
    public string Description { get; set; }
    public string Comments { get; set; }
    public string Version { get; set; }
}

List<TypesModel> types = await DataSource.GetTypesAsync(typeinfo.pType, true); 

foreach (var type in types)
{
  type.Department = new DepartmentModel 
  { 
      pDepartment = type.fDeparment, 
      Name = "???" 
  };
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...