簡體   English   中英

在MVVM中使用代碼隱藏來處理子窗口有什么缺點?

[英]What are the disadvantages of using code-behind to handle child windows in MVVM?

假設需要創建一個子窗口並處理某些視圖模型的結果。

為此,我們可以使用后面的代碼。

例:

// Code Behind
class SampleView : ISampleView
{
  public void CreateChildWindow(params string [] args)
  {
      var childWIndow = ChildViewFactory.Create(args);
      childWindow.Closed += 
      () =>  {
                if(childWindow.Result)
                {
                    this.ViewModel.DoSomething();
                }
                else
                {
                    this.ViewModel.DoSomethingElse();
                }
             };
      childWindow.Show();
  }
}

// ViewModel
class SampleViewModel
{
     private void OnSomeCommandHandler()
     {
         ((ISampleView)this.View).CreateChildWindow(new []{""});
     }

     public void DoSomething()
     {

     }

     public void DoSomethingElse()
     {

     }
}

我在任何地方都沒有看到這種方法,但是似乎很合邏輯。

自那以來,我一直在想-使用此模式可能有哪些缺點?

您在這里提出了一個相當主觀的問題。 頑固的MVVM開發人員可能會說您永遠不要使用文件后的代碼,而其他人可能會說這完全可以。

將代碼與視圖分離的主要原因是允許使用模擬數據訪問類輕松測試所有視圖模型代碼。 有人會告訴您,這種分離也使我們可以交換相同內容的不同視圖,但是我從來不需要這樣做。

我確信您會發現有人說您永遠都不要從視圖模型中打開視圖-視圖模型不應對視圖一無所知。 這些人將使用某種服務層從視圖模型(間接)啟動視圖。 其他人會告訴您,從后面的父視圖代碼啟動子視圖正是您應該做的。

歸根結底,這實際上取決於您和您正在開發的應用程序的個人決定。 由於我們通常測試視圖模型而不是視圖(是的,我知道WPF中的自動化UI測試),所以我說不使用后面的視圖代碼的唯一原因是因為該代碼不會被測試(至少在正常方式以及視圖模型代碼)。

但是,我們真的需要測試啟動子窗口的簡單代碼嗎? 我認為,我們不會... Microsoft已經為我們進行了測試。 因此,要回答您的問題,我想說,使用背后的代碼啟動子窗口的缺點將取決於您的個人情況,但是,如果有的話,這不太可能是一個嚴重的缺點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM