Как мне спроектировать составное представление и модель представления, используя Silverlight и MVVM? - PullRequest
2 голосов
/ 02 марта 2011

Я хочу создать «Мастер» в моем приложении Silverlight MVVM.Мастер должен содержать несколько шагов, между которыми вы можете перемещаться, используя «следующий» и «предыдущий».Проблема, с которой я сталкиваюсь - это связь между представлениями и моделями представления.Я хочу, чтобы был вид и модель для самого мастера.Мой инстинкт подсказывает мне, что для каждого шага в мастере должна быть одна пара моделей вида / представления.

Какой подход хорош для поддержания таких отношений, когда одна модель представления содержит несколько других моделей представления ивид на самом деле состоит из нескольких меньших видов?Могу ли я использовать какие-либо модели или практики?

Я знаю, что этот вопрос может быть субъективным, но дайте мне грубый подход, и я наградлю вас ответом!

1 Ответ

4 голосов
/ 02 марта 2011

Я бы предложил главный мастер viewModel, который имеет коллекцию steps моделей просмотра и обрабатывает навигацию между ними. Во время навигации он должен вызывать методы проверки в step viewModels:

WizardVM:

public class WizardVM
{
     // this commands should support CanExecute
     public ICommand GotoNextCommand { get; private set; } // should open next step VM
     public ICommand GotoBackCommand { get; private set; } // should open previous step VM

     // this prop should be set by 'GotoNext', 'GotoBack' commands
     public object CurrentStep { get; private set; }

     // probably internally you will have a list of all steps:
     private ICollection<object> _stepViewModels = ...;
}

WizardView:

<StackPanel>
    <ContentPresenter Content="{Binding CurrentStep}">
    <StackPanel Orientation="Horizontal">
        <Button Command="{Binding GotoBackCommand}">Back</Button>
        <Button Command="{Binding GotoNextCommand}">Next</Button>
    </StackPanel>
</StackPanel>

UPDATE

Представления могут быть связаны с ViewModels через Datatemplating. Например, добавьте это в ресурсы в App.Xaml:

<DataTemplate DataType="{x:Type local:Step1ViewModel}">
     <Step1View />
</DateTemplate>
<DataTemplate DataType="{x:Type local:Step2ViewModel}">
     <Step2View />
</DateTemplate>

Ваши viewModels не должны абсолютно ничего знать о представлениях. Это означает, что WizardVM должен выставлять только другие модели представления, но не представления. Это практическое правило для MVVM.

UPDATE2 Упс, я забыл, что в Silverlight пока нет DataTemplating. В Silverlight я бы по-прежнему выставлял ViewModel, но связывал их с ContentPresenters, используя конвертер, который преобразует ViewModel в соответствующий вид.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...