我在PRISM體系結構中有一個WPF應用程序。子視圖不會自動實例化其「視圖模型」
我有一個用戶控制(視圖),其中有2個用戶控件。
Here is the idea : Here is an idea : http://s18.postimage.org/5i0vik8vr/SO_Question_6.png
之所以在「搜索用戶制」是在其自己的用戶控制,是因爲我打算在我的應用程序重複使用它。
主要用戶控件(黑色)被稱爲「的MainView」,並具有在其2個用戶控制: - 用戶控制具有幾個TextBox控件我可以過濾通過,以及「搜索」按鈕 - 顯示結果的網格的用戶控件
這些用戶控件(和父級,「主視圖」)中的每一個都是「視圖」並具有「視圖模型」。
除了「孩子」用戶控件不會自動創建自己的「視圖模型」這一事實之外,一切都很好顯示。
在視圖模型中的類我有「導出」屬性, 並在查看的隱藏代碼,我有這樣的片段:
[Import]
FilterFieldsViewModel ViewModel
{
set
{
this.DataContext = value;
}
}
設置「視圖模型」 確實發生的'主視圖',但不是爲子視圖...
我有一個命令綁定到'搜索用戶控件'的搜索按鈕, ,當應用程序加載 - 我得到輸出窗口出錯,說:
BindingExpression path error: 'SearchCommand' property not found on 'object' ''MainWindowViewModel' (HashCode=22047425)'. BindingExpression:Path=SearchCommand; DataItem='MainWindowViewModel' (HashCode=22047425); target element is 'Button' (Name='Search'); target property is 'Command' (type 'ICommand')
出於某種原因,從「孩子」的用戶控件試圖命令綁定到在主窗口中的視圖模型視圖模型,因爲某些原因 - 孩子的用戶控件的視圖模式不會被實例化。
這是爲什麼?
偉大的解決方案,只有一個問題 - 這不是主視圖與子視圖? – 2012-07-26 08:24:42
我在某處讀到,可能的解決方案可能是爲'搜索控件'定義一個區域併爲'網格控件'定義一個區域,然後使用MEF自動將控件加載到這些區域。這種方法的問題在於,在設計過程中 - 我無法看到最終的「主」窗口與其中的控件的外觀是什麼樣的......你明白嗎? – 2012-07-26 08:25:42
@JohnMiner你的確是正確的,從架構的角度來看,定義子區域是一個更好的解決方案,但它更多的工作,所以我猜這是更多的'財務'決定。 – Bas 2012-07-26 09:04:02