В настоящее время я пытаюсь создать небольшое приложение, используя шаблон MVVM.Однако я не знаю, как правильно обернуть агрегированные классы Model в моей ViewModel.Из того, что я мало знаю о MVVM, вы не должны выставлять Модели в вашей ViewModel как свойства, иначе вы могли бы напрямую связываться с Моделью из вашего Представления.Поэтому мне кажется, что мне нужно обернуть вложенную модель в другую ViewModel, но это налагает некоторые проблемы при синхронизации Model и ViewModel позже.
Так как же вы это эффективно сделаете?
Я будуприведу короткий пример.Предположим, у меня есть следующие классы моделей:
public class Bar
{
public string Name { get; set; }
}
public class Foo
{
public Bar NestedBar { get; set; }
}
Теперь я создаю два класса ViewModel соответственно, оборачивая модели, но сталкиваюсь с проблемами с FooViewModel:
public class BarViewModel
{
private Bar _bar;
public string Name
{
get { return _bar.Name; }
set { _bar.Name = value; }
}
}
public class FooViewModel
{
private Foo _foo;
public BarViewModel Bar
{
get { return ???; }
set { ??? = value; }
}
}
Что теперь делатьЯ делаю с Bar-свойством FooViewModel?Чтобы "получить" работать, мне нужно вернуть экземпляр BarViewModel.Создать новое поле этого типа в FooViewModel и просто обернуть туда объект _foo.NestedBar?Изменения в свойствах этого поля должны распространяться вниз до базового экземпляра Bar, верно?
Что если мне нужно назначить другой экземпляр BarViewModel этому свойству, например, так:
foo.Bar = new BarViewModel();
Теперь, когда победилне распространяется на модель, которая по-прежнему содержит старый экземпляр типа Bar.Мне нужно создать новый объект Bar на основе новой BarViewModel и передать его _foo, но как вы это делаете элегантно?В этом примере это довольно тривиально, но если Bar намного сложнее с большим количеством свойств, это будет много печатать ... не говоря уже о том, что он будет очень подвержен ошибкам, если вы забудете установить один изсвойства.