Множество стъпки, продиктувани от MVVM ViewModel: Най-добри практики?

Представете си, че имате изглед, който ще показва множество стъпки за събиране на данни. Въз основа на решенията в предишната стъпка, последователността или конкретните случаи на следващите стъпки ще варират.

Следвайки най-добрите практики на пуристите на MVVM, смятам, че наличието на списък с ViewModel във външния ViewModel е начинът да се справим с това и нека външният View обвърже персонализирана контрола на раздела (или подобна) към това.

Това ме навежда на два аспекта от това, които не са ми ясни:

Първа точка: „Кое дойде първо?“

Външната комбинация View / ViewModel вероятно ще бъде "View First". Това означава, че един изглед или получава ViewModel, или инстанцира такъв.

Но когато става въпрос за списъка с ViewModels в рамките на този външен ViewModel: Откъде идват съответните им ViewModels? Кой субект е отговорен за избора на най-добрия изглед за всеки от тях?

Не ми е приятно да редувам „Първо изглед“ и „Първо ViewModel“ по този начин.

Втора точка: Комуникация между ViewModel

Когато една от вътрешните стъпки на ViewModel е завършена, напр. при щракване върху бутон "Запазване" или "Напред", трябва да се задейства команда към този вътрешен ViewModel и след това трябва да се покаже следващият.

Това изисква външният ViewModel да:

  1. можете да вземете командата Save, изпратена до вътрешния ViewModel

  2. да имате достъп до данните във вътрешния ViewModel.

Как човек обикновено би постъпил за това? Счита ли се за лоша практика свързването на вътрешния и външния ViewModel заедно със събития?


person BoldBob    schedule 01.04.2011    source източник
comment
Моля, погледнете тук, този въпрос има свързана информация   -  person Snowbear    schedule 01.04.2011
comment
View First е само един правилен подход, защото предаването на изглед към модел на изглед нарушава принципите на MVVM. Съответстващите изгледи се прилагат в xaml като '‹view:SomeView DataContext={Binding SomeInnerViewModel} /›'. За комуникация използвайте класа Messenger от библиотеката MvvmLight.   -  person vortexwolf    schedule 01.04.2011
comment
Използвам DI библиотека и избирам изгледите и моделите на изгледи в нейните съпоставяния, обвързвайки нещата заедно в код на модул от най-високо ниво. Но моите приложения никога не са били толкова сложни. Това също не решава проблема ви с подизглед. Неща като Prism Регион функция може да помогне с това.   -  person Merlyn Morgan-Graham    schedule 17.11.2011


Отговори (1)


1) Според моето разбиране MVVM винаги казва, че ViewModels first и Views са обвързани с вече инстанциран ViewModels. За всички вътрешни/външни ViewModels.

Откъде идват съответните им изгледи? Кой субект е отговорен за избора на най-добрия изглед за всеки от тях?

В WPF предпочитам да използвам DataTemplating поради тази причина. В app.xaml или в друг ресурсен файл за цялото приложение вие ​​дефинирате DataTemplates специфично за всеки от вашите ViewModels. В Views поставяте обвързване към ViewModel в ContentPresenter и DataTemplating въвежда View там. проба:

App.xaml:

<Application.Resources>
    <DataTemplate DataType="{x:Type local:OuterViewModel}">
        <local:OuterView />
    </DataTemplate>
    <DataTemplate DataType="{x:Type local:InnerViewModel}">
        <local:InnerView />
    </DataTemplate>
<Application.Resources>

OuterView.xaml:

<Grid>
    <!-- Assuming OuterViewModel has a property named 'InnerViewModel' -->
    <ContentPresenter Content="{Binding InnerViewModel}" />
</Grid>

2)

можете да вземете командата Save, изпратена до вътрешния ViewModel

Бих сложил SaveCommand на OuterViewModel

да имате достъп до данните във вътрешния ViewModel.

Бих имал препратка към всеки вътрешен ViewModel във OuterViewModel

person Snowbear    schedule 01.04.2011