2009-05-24 55 views
4

這個問題涉及到MVVM模式,我可以在這個論壇上很好和快速的回​​答,所以我想問清楚我對模式的混淆。關於MVVM模式和GUI中動態加載XAML的困惑

我對MVVM方法很新穎。我欣賞這種模式並理解背後的原則。也許我對這種模式沒有太多的工作,這就是爲什麼有一些混亂。

如果有一種情況,我想用XAML動態加載WPF頁面的幾個部分,並且仍然希望符合MVVM方法。

的混亂是:

  1. 凡與XAML動態加載的視圖的邏輯駐留。
  2. 無論我的WPF頁面是否應該有一個ViewModel,或者每個獨立的部分都有自己的視圖模型以及與其他視圖模型類的交互。
  3. 如果我必須在代碼隱藏本身中使用C#代碼構建在GUI上顯示的控件樹,該怎麼辦? 對於使用代碼創建的控件,我應該在視圖本身的代碼隱藏中執行命令綁定。

回答

1

加載的邏輯是模式本身沒有真正解決的問題。 Ward Bell對此有一個有趣的blog post。有許多方法可以對這個貓進行皮膚處理,並且它們都與MVVM兼容。不是真的你要找的答案,我知道,但它是誠實的:)。查看Ward的博客文章...您將會對此主題進行更深入的討論。

至於是否只有一個虛擬機用於該頁面,或者每個控件只有一個虛擬機。一般來說,我有一個頁面。如果某些部分可以在其他地方重複使用,那麼我會將其分解爲具有自己VM的用戶控件,這意味着我們在VM中有一個VM。我不同意rockeye這個。 V-VM-M之間不存在一對一的關係。您是模特根據業務需求設計,根本不考慮演示。您的ViewModel根據您的演示需求進行設計,並可封裝多個模型。事實上,他們封裝很多模型是非常普遍的。

像rockeye,我不明白你的最後一個問題。

+0

偉大的答案+1的鏈接 – 2009-07-18 23:09:06

0

我也是很新的MVVM,但我會盡量回答:

  1. 在以利用XAML動態加載一個視圖的邏輯駐留

如果您意思是「我如何顯示與業務對象相關的視圖?」,恕我直言,你不必關心這一點。通常,您的虛擬機具有相應的視圖。使用dataTemplate,您只能在代碼中使用虛擬機,但視圖會自動顯示。

2我是否應該有一個單一的視圖模型爲我的WPF頁面或每個單獨的部分有自己的視圖模型與交互與其他視圖模型類

看來你有一個上下的方式。我將mvvm看作自下而上:模型(業務對象) - > ViewModels - > Views。每個模型都應該有自己的ViewModel和視圖。因此,除非您的模型代表頁面,否則您無法在viewModel中擁有完整的WPF頁面。

3如果我必須在代碼隱藏本身中使用C#代碼構建在GUI上顯示的控件樹,該怎麼辦?對於使用代碼創建的控件,我應該在視圖本身的代碼隱藏中執行命令綁定。

不明白。我想你可以看看dataTemplate,它可能是有用的。