2012-08-25 31 views
0

因爲我是WPF/XAML的新手,因此忍耐。我試圖編寫一個MainWindow.xaml/App.xaml對,它可以正確隔離程式化和數據綁定,儘可能接近模型視圖控制器。到目前爲止:如何使用WPF/Databinding堅持MVC

  • 我有一個styles.xaml,其中包含所有的格式(字體,邊距等)。它是從app.xaml的Application.Resources引用的,以便它可以應用於項目中的所有WPF表單。
  • 模型數據集合作爲App的成員變量存在,App通過GetX()acccessor函數公開它們。
  • mainwindow.xaml包含視圖結構以及綁定信息。這是像這樣做:

    的ObjectDataProvider X:重點= 「AppX中」 方法名= 「的getX」 ObjectInstance = 「{X:靜態本地:App.Current}」

是主窗口的事實。 xaml包含綁定信息是不好的,因爲那應該是控制器(app)的角色。不幸的是,我發現WPF設計器的一個限制是你不能(例如)有兩個無鍵資源引用(一個用於視圖樣式,一個用於數據綁定樣式)。同樣,app.xaml在其Resources部分中不能同時包含styles.xaml引用和一組數據綁定樣式。

我理論上可以從應用程序的啓動處理程序手動實例化主窗口,然後在代碼中執行綁定,但這會違反WPF的精神,有兩種方式 - 應用程序不需要創建窗口,因爲這是在後臺完成的;並且在可能的情況下,XAML中的綁定比代碼中的更好。如果有一種方法可以通知應用程序已經創建了主窗口,以便它可以進行綁定,那麼這並不壞,但我還沒有看到任何(主窗口在調用應用程序之後負載,但這不應該是視圖的責任)。

所以我有種出門的肢體。我不知道有什麼方法可以正確地遵守MVC,同時仍然是以「WPF方式」做事 - 似乎VS設計師的默認設置是創建一個單片式窗口XAML,它具有混雜的視圖,視圖風格和控制器。任何關於如何做得更好的鏈接或鏈接到關於這個主題的好網站的介紹將不勝感激。

+1

是否嚴格要求使用MVC? MVVM - [示例1](http://msdn.microsoft.com/zh-cn/magazine/dd419663.aspx),[示例2](http://msdn.microsoft.com/zh-cn/library/ gg405484(v = pandp.40).aspx) - 模式是專門爲了利用WPF DataBinding的強大功能而引入的。你在說你想做的事情是「WPF之路」 - 這就是MVVM。我曾在一個團隊中嘗試在一個大型項目上爲WPF做MVP,並且我們花了一年多的時間撤銷了這項工作並轉換爲MVVM。這是一個更好的選擇。 –

回答

2

MVVM本質上是MVC。在MVVM中,視圖進一步分離爲視圖和視圖模型,其中視圖現在僅僅是UI的控件,視圖模型保存視圖的數據和邏輯。另外,在MVVM中,View和View Model之間的關係也可以看作MVC模式,其中M = ViewModel,V = View,C = DataBinding。

+0

行動希望添加此答案作爲評論。目前無法做到這一點 –

+0

Brian,Simon - 這正是我需要知道的。謝謝。 – Reinderien