用于多个UI的接口控制器(ViewModel)

时间:2010-07-01 22:51:00

标签: asp.net wpf winforms mvvm user-interface

我目前正在设计一个新的.NET应用程序,并希望将其与UI保持独立。

虽然我最初想使用WPF,但我希望可以选择在必要时将UI交换为ASP或WinForms。

在分层设计中:

视图 - 接口控制器(ViewModel) - 模型 - 持久性

是否可以设计接口控制器以便它可以使用不同的视图技术,还是需要在视图的同时更换接口控制器?

2 个答案:

答案 0 :(得分:2)

查看我的问题answer"Silverlight with MVVM Inheritance: ModelView and View matching the Model"

我给出的答案也适用于你的情况。

简而言之,我定义了以下通用接口:

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<VM>接口的实现与WPF,Silverlight,Windows Forms甚至ASP.Net交换。

答案 1 :(得分:0)

只要你

1)不要试图将代码隐藏在你的xaml标记中

2)并限制所有相关功能由viewmodel

决定

然后是的,您应该能够将其与任何视图技术交换出来。

当你把它换掉时,你显然必须重新连接新的ui与viewmodel交互的方式。 WPF用于连接到viewmodel的主要接口是INotifyPropertyChanged,INotifyCollectionChanged和ICommand。因此,您的新UI将基本上必须利用这些接口来获得相同的功能