2012-04-06 53 views
3

全部,我是Windows 7 Phone的新手。我的情況是,我有一個主頁面,其中包含一個ScrollViewer,而這個頁面又包含一個StackPanel。我想用多個sub StackPanel(在運行時)填充這個StackPanel,它們將Image Thumb釘子保存爲一個超鏈接和一些關於圖像的基本信息。從Windows Phone上的多個頁面更新控件

當我從主頁面執行此操作時,這是非常好的,但我想知道如何更新此控件(位於主頁面上),而不是主頁面以外的任何頁面。我想知道從另一頁面更新頁面控件(如上所述)的最佳實踐。

顯然,有許多方法來

PhoneApplicationService.Current.State["yourparam"] = param 
NavigationService.Navigate(new Uri("/view/Page.xaml", UriKind.Relative)); 

頁面之間傳遞數據,然後在其他頁面只是

var k = PhoneApplicationService.Current.State["yourparam"]; 

等等。但是更新來自不同頁面的通用控件的最佳做法是什麼?

注意:關於頁面之間的數據訪問和傳遞有很多問題。

  1. Passing data from page to page
  2. How to pass the image value in one xaml page to another xaml page in windows phone 7?
  3. Passing image from one page to another windows phone 7

多。這不是我所問的。

回答

3

如果我正確理解你的問題,你正嘗試從另一個頁面例如Page2.xaml更新一個例如MainPage.xaml的控件。

據我所知,沒有辦法從另一個頁面到達頁面控件,這對於我能想到的情況似乎是不必要的。

用於實現您所嘗試的方法通常是通過觸發某個操作(如按按鈕)並將參數傳遞給您嘗試更新控件的頁面來完成。並且在該頁面的onnavigatedto事件(或者如果您使用MVVM模式時使用viewmodel構造函數),請根據傳遞的參數更新控件。

如果您的更新基於數據,那麼最佳做法是綁定可觀察集合或擴展INotifyPropertyChanged的對象(基本上任何可以表示其屬性之一已更改爲ui的任何對象)並更改基於數據在傳遞的參數上。

如果這兩個頁面在某種程度上同時可見,並且它們之間不需要導航(例如彈出菜單或滑動菜單),那麼您可以在彈出窗口中顯示一個用戶控件,並通過this.Parent獲得父母的控制權。

如果您提供關於應用流程的更多細節,我可以更有幫助。

+0

這已經非常有幫助。你在第一段中說得對。我有一個基本的Windows Phone應用程序,最多隻有3/4頁。主頁面將包含將在應用程序中的其他頁面上創建的照片和信息。我想我可以將我想要顯示的信息存儲在IsolatedStorage中,並獲取信息並在恢復時從其中填充主頁面。我一定會看看MVVM模式,我聽說過它,但我對windows phone開發非常陌生,感謝您的時間... – MoonKnight 2012-04-06 11:33:37

+1

您可以將您的主頁面要訪問的數據保存在全球靜態課程,當您回到主頁面時,需要從該課程獲取照片和其他必要數據並更新您的用戶界面,這不是一個非常優雅的解決方案,但它可以完成工作。 但是對於小型應用程序或者像1或2個人這樣的非常小的團隊來說,MVVM是一個很好的模式,它可能會不必要的複雜化。絕對要學習它,但如果你不是單獨與UI設計師和代碼隱藏開發人員合作,你可能不需要使用MVVM。 – omerkirk 2012-04-06 12:08:51

+0

非常感謝您的建議...... – MoonKnight 2012-04-06 12:17:29

2

MVVM模式將是一個好方法。說MVVM對於小團隊來說太複雜並不完全準確--MVVM的目的是分離Silverlight或WPF代碼。使用Silverlight頁面的代碼隱藏來直接訪問數據會在代碼中產生耦合,並累積技術債務。無論你是一名開發人員還是100人,如果你的UI與你的數據類相結合,如果你必須改變你的數據類,你將不得不改變使用這些類的每個UI元素。這需要更長的時間,並使您的應用程序更難以更改。

MVVM使它成爲你的UI(視圖)不知道任何有關數據(你的模型)。 ViewModel是UI可以綁定到的UI之間的代碼,以及管理UI中需要保存到模型中的事件的代碼,以及需要在View中表示的Model中的代碼。出於這個原因,它處理事件,這就是你在代碼中需要的東西 - 一個可以隱藏代碼的事件,可以在數據更改時更新綁定到它的Views。如果您有兩個頁面,則其中一個頁面上的事件將被髮送到ViewModel,如有必要,它將更改Model(數據),並將其傳遞迴ViewModel。然後,ViewModel將更新綁定到該數據段的任何UI元素(視圖)。

關於如何實現MVVM設計模式here 有一個非常好的演示。這個人經歷了一個典型的WPF應用程序(就像Silverlight一樣),UI代碼隱藏實現了直接訪問數據的事件處理程序,並使用MVVM模式重構它。