代码之家  ›  专栏  ›  技术社区  ›  benPearce

多个用户界面的接口控制器(ViewModel)

  •  1
  • benPearce  · 技术社区  · 14 年前

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

    虽然我最初希望使用WPF,但如果需要,我希望可以选择将UI交换到ASP或WinForms。

    在分层设计中:

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

    是否可以设计接口控制器,使其能够使用不同的视图技术,或者我需要在视图的同时替换接口控制器?

    2 回复  |  直到 14 年前
        1
  •  2
  •   Community CDub    7 年前

    看看我的 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窗体甚至ASP.NET的接口。

        2
  •  0
  •   Jose    14 年前

    只要你

    1)不想将代码放在XAML标记后面

    2)并限制所有相关功能由您的视图模型决定。

    然后是的,您应该能够用任何视图技术交换它。

    当你换掉它时,很明显你需要重新连接新的用户界面与视图模型的交互方式。WPF用于连接到ViewModel的主要接口是inotifyPropertiesChanged、inotifyCollectionChanged和icommand。因此,新的用户界面基本上必须利用这些接口来获得相同的功能。