2015-10-19 59 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; 
    } 
} 

,就可以從查看調用視圖模型,還可以查看來自視圖模型。