保持MVVM記住什麼纔是打開子窗口的正確方法(例如,修改主窗口上的選定項)?將複雜對象傳遞給子窗口
這是我有:MainWindow.xaml(在MainWindow.xaml.cs它分配MainVM作爲自己的DataContext)
我也想有:ChildWindow.xaml和準系統ChildWindow.xaml.cs與ChildVM隱藏在控件之後。
所以,現在:
- 我怎麼能彈出
ChildWindow
並傳遞一些對象Data
其ChildVM
? - 將結果(true/false)和結果數據(一些複雜的 對象)返回到
MainVM
? - 作爲獎勵,可以在
Data
的變化 的MainVM
,而他們在ChildVM
的工作?
這是我試過的 - 它並不能解決所有問題,但這是否正確?
- 對於(2),I創建的
Window
一個子類,稱爲DialogWindow
,其具有3個DependencyProperties:Data
(用於輸入數據),ResultData
(輸出數據)和ResultValue
(爲一個布爾結果)。 ResultData
和ResultValue
均由的DialogWindow
的ChildVM
使用綁定集,並且當ResultValue
被設置時,DialogWindow
關閉。目前,
ChildWindow
從MainWindow.xaml.cs啓動(所有意圖和目的) - 有點不好。那麼我可以通過一些輸入數據,像這樣:ChildDialogWindow w = new ChildDialogWindow();
w.Data = myDataObj;
所以,現在我需要有一個屬性Data
上ChildVM,並在ChildDialogWindow.xaml.cs設置。再一次,使.xaml.cs更厚。
我認爲,避免MainWindow.xaml.cs可能是一種更好的方法DialogService
作爲依賴傳遞給MainVM
。但是,如何將值傳遞給ChildVM
?
[也許看看這個?](http://stackoverflow.com/a/16994523/1834662) – Viv
@Viv,這是不壞,但它採用的是框架,我希望避免。我想也許我可以解除Messenger的代碼(除非它依賴於其他一些框架,比如SimpleIoC) –
爲什麼要避免使用框架?.net是一個框架,我們可以編寫本機C代碼並避免.net all-together :)如果你的目的是要「學習」它的功能,你可以隨時獲得它的源代碼,看看它是如何實現的,並且自己做。 'SimpleIoC'只是一個非常簡單的DI容器。如果你正在尋找廣泛的功能,你會看Unity並分類。我只是爲了「不依賴」而重新發明車輪。 – Viv