我目前正在设计一个新的.NET应用程序,并希望将其与UI保持独立。
虽然我最初想使用WPF,但我希望可以选择在必要时将UI交换为ASP或WinForms。
在分层设计中:
视图 - 接口控制器(ViewModel) - 模型 - 持久性
是否可以设计接口控制器以便它可以使用不同的视图技术,还是需要在视图的同时更换接口控制器?
答案 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将基本上必须利用这些接口来获得相同的功能