Подтвердить что ты не робот

MVVM и вложенные модели просмотра

У меня есть простой пример, когда я создаю представление, состоящее из окна списка, а в окне списка отображается куча элементов. Мне интересно, правильно ли я собираюсь создать классы View Model и Model здесь. Использовать любое значение корректно работает в этом контексте, я понимаю это немного субъективно, но мое текущее решение не кажется правильным. Вот упрощенная версия.

Модели и модели View:

namespace Example
{
  public class ParentViewModel
  {
      public ParentViewModel()
      {
          // ... Create/Consume ChildViewModel * n
      }

      public List<ChildViewModel> ChildViewModels { get; set; }
  }

  public class ChildViewModel
  {
      public ChildViewModel()
      {
          // ... Create/Consume ChildModel
      }

      public ChildModel Model { get; set; }
  }

  public class ParentModel
  {
      public List<ChildModel> ChildModels { get; set; }

      public ParentModel()
      {
          // ... Create/Consume ChildModel * n;
      }
  }

  public class ChildModel
  {
      public ChildModel()
      {
          // ... Contains actual data.
      }

      public string Data { get; set; }
  }    
}

Вид:

<Window x:Class="Example.View"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:Example="clr-namespace:Example" Title="View" Height="300" Width="300"
    DataContext="{StaticResource TheViewModel}">
    <Window.Resources>
    <Example:ParentViewModel x:Key="TheViewModel" />
</Window.Resources>
<Grid>
    <ListBox Height="261" HorizontalAlignment="Left" Name="listBox1" VerticalAlignment="Top" Width="278" ItemsSource="{Binding ChildViewModels}"/>
</Grid>

В правильном коде в списке будет использоваться шаблон данных для отображения моделей дочернего представления. Но, как вы можете видеть, я не уверен, как создать экземпляр дочерних объектов. Похоже, что ParentViewModel будет ссылаться на ParentModel и создавать объекты ChildViewModel на основе объектов ParentModel ChildModel. Теперь я сказал, что это звучит не так глупо, но меня бы интересовали ваши мысли.

4b9b3361

Ответ 1

Вы на правильном пути.

Родительская модель, естественно, будет содержать список дочерних моделей, например. клиент, имеющий несколько заказов.

Когда ParentViewModel создается и загружается сторонним, он передает ParentModel. Тогда ParentViewModel будет:

  • Присвойте ParentModel локальной переменной
  • Создайте ChildViewModel для каждого ChildModel, передав ChildModel в конструктор ChildViewModel
  • Добавьте каждый из этих ChildViewModels в список

Кстати, вы хотите

public List<ChildViewModel> ChildViewModels { get; set; }

быть

public ObservableCollection<ChildViewModel> ChildViewModels { get; set; }