Контроллер интерфейса (ViewModel) для нескольких UI

Я в настоящее время разрабатываю новое приложение.NET и хотел бы сохранить его UI независимый.

Пока я initally хотел бы использовать WPF, я хотел бы иметь опцию свопинга UI к ASP или WinForms при необходимости.

В многоуровневой структуре:

Представление - контроллер интерфейса (ViewModel) - модель - постоянство

действительно ли возможно разработать Контроллер интерфейса так, чтобы это работало с технологиями другого представления, или я должен буду заменить контроллер интерфейса в то же время, что и Представление?

1
задан benPearce 1 July 2010 в 22:51
поделиться

2 ответа

Взгляните на мой ответ на вопрос «Silverlight с наследованием MVVM: ModelView и View, соответствующие модели» .

Ответ, который я дал, работает и в вашей ситуации.

Вкратце, я определяю следующие общие интерфейсы:

public interface IModel
{
}

public interface IViewModel
{
}

public interface IViewModel<M> : IViewModel
    where M : IModel
{
    void Bind(M model);
}

public interface IView
{
}

public interface IView<VM> : IView
    where VM : IViewModel
{
    void Bind(VM viewModel);
}

Которые позволяют мне определять конкретные интерфейсы, подобные этому:

public interface IPersonModel : IModel
{
}

public interface IPersonViewModel : IViewModel<IPersonModel>
{
}

public interface IPersonView : IView<IPersonViewModel>
{
}

Реализуя ваши уровни против этих интерфейсов, вы можете поменять местами свою реализацию IView интерфейс с WPF, Silverlight, Windows Forms или даже ASP.Net.

2
ответ дан 2 September 2019 в 23:22
поделиться

При условии, что вы

1) У вас нет соблазна поместить код программной части в вашу разметку xaml

2) и ограничить все соответствующие функции, которые будут продиктованы вашей моделью просмотра

, тогда да, вы сможете заменить его любой технологией просмотра.

Когда вы меняете его местами, вам, очевидно, придется изменить способ взаимодействия нового пользовательского интерфейса с моделью просмотра. Основными интерфейсами, которые WPF использует для подключения к модели представления, являются INotifyPropertyChanged, INotifyCollectionChanged и ICommand. Таким образом, ваш новый пользовательский интерфейс должен будет подключаться к этим интерфейсам, чтобы получить ту же функциональность

0
ответ дан 2 September 2019 в 23:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: