2015-10-19 56 views
0

小问题。我正在编写MVVM设计模式(C#)。 View是一个Excel加载项,我想从View_Model运行一个在View中找到的方法。我想到了2种方式:在视图模型有关MVVM的最佳设计咨询

  1. 保持一个指向视图(指针类型是查看和View_Model继承的接口,否则我会得到一个圆形的独立性,因为观举行View_Model和View_Model保存视图),然后直接从他运行该方法。
  2. 在View_Model中创建一个事件,并在View中的View_Model指针中查看该事件中的方法,我已经在View中使用该方法,并在我想运行此方法时引发该事件。

不知何故,方式2感觉有点像街上只有一个人尖叫,而不是直接跟他说话。另一方面,第二种方式的优点是,将来如果我有其他方法与此操作有关,我可以将它们签署给该事件,而不是专门调用它们。

你会做什么?

回答

1

方法1打破了MVVM原则,因为视图模型不应该了解视图。你的方法有点像MVP设计模式。

我会说方法2是更好的方法,视图模型的视图是完全正确的。例如,如果您想使用不同的视图并调用不同的方法,它还使您可以灵活地随时随地做任何事情。

此外,这种事情可以使用一个好的消息框架来完成。视图模型发布消息,视图订阅它。 mvvmlight框架的工作有很好的实现,但我相信也有其他人。

0

取一个接口,从中实现它的视图。通过传递这个视图来实例化viewmodel。

让我们说 -

接口

public interface IFooView 
{ 
    ... 
} 

查看

public Class FooView : IFooView 
{ 
    private FooViewModel _viewModel; 
    public FooView() 
    { 
     _viewModel = new FooViewModel(this); 
    } 
} 

视图模型现在

public class FooViewModel 
{ 
    private FooView _view; 
    public FooViewModel(IFooView view) 
    { 
     _view = view; 
    } 
} 

,就可以从查看调用视图模型,还可以查看来自视图模型。