我在使用Silverlight Map控件的Windows Phone 7應用程序中有一個頁面(視圖)。使用Caliburn Micro和WP7調用地圖控件的方法
我需要在控件上調用SetView方法,但我想堅持MVVM風格來保留視圖模型中的功能。
我打算在點擊應用程序欄按鈕後調用此方法,因此我無法通過EventArgs參數訪問Map。
這樣做的最好方法是什麼?
我在使用Silverlight Map控件的Windows Phone 7應用程序中有一個頁面(視圖)。使用Caliburn Micro和WP7調用地圖控件的方法
我需要在控件上調用SetView方法,但我想堅持MVVM風格來保留視圖模型中的功能。
我打算在點擊應用程序欄按鈕後調用此方法,因此我無法通過EventArgs參數訪問Map。
這樣做的最好方法是什麼?
我還沒有與地圖控制工作我自己,但這裏的一對夫婦的想法把我的頭頂部:
您可以發佈使用該視圖可以訂閱的IEventAggregator事件並用它來調用SetView。
你可以實現一個自定義IResult,它使用ActionExecutionContext獲取視圖,找到地圖控件並調用SetView。
您可以在您的視圖模型上實現IViewAware(如果您從屏幕繼承,則覆蓋OnViewLoaded),並遵循更多的監督控制器方法,通過與視圖交互以通過接口調用SetView。
我已經通過在視圖模型上使用MapLocation屬性,然後在視圖中連接到視圖模型的PropertyChanged事件來完成此操作。當屬性是MapLocation屬性時,我只需調用SetView並傳遞ViewModel的MapLocation屬性的值。
我知道這不是「嚴格」MVVM,但我們在這裏討論的東西是視圖特定的,但不能被束縛。 Rob提出的事件聚合器方法是另一個不錯的選擇,但在這種情況下看起來像是矯枉過正。我全力以赴與任何行之有效的和良好的性能爲用戶:)
我做了很多關於這個特定的事情的研究,這個問題是有幫助的。最終,我最終在ViewModel上創建了一個Microsoft.Phone.Controls.Maps.Map屬性。我所要做的就是將xaml中的x:Name屬性設置爲視圖模型上的Map屬性的名稱。然後,我可以輕鬆地從視圖模型更新地圖,並調用SetView。您只需更改地圖的這些屬性即可輕鬆更改地圖中心並更改縮放級別,因此您只需在初始化時調用SetView即可。我相信你可以使用類似的技術來約束任何東西。 Map控件對於開箱即用的控件來說非常棒,並且與Caliburn.Micro很好地搭配。
感謝羅布,我會檢查這些選項。我之前沒有使用CM的這些部分,所以這是一個很熟悉的好機會。 – 2011-01-11 22:50:32