考慮以下情形:如何從一個視圖發送對象到下一個
你是在有大量數據的(即具有ListBox
整個項目的視圖)的視圖。數據已從外部數據源下載,幷包含許多未在當前視圖中顯示的屬性。您想詳細查看以顯示此信息。
當您連接ListBoxItem
以導航至導航URL中附加的「id =」的新視圖時,您可以輕鬆地查詢您的數據源(即REST服務)給定ID參數。但是,數據已經在父視圖中可用 - 那麼如何以某種方式將此數據發送到下一個視圖 - 跳過對數據源的另一個調用並加快了應用程序的速度?
考慮以下情形:如何從一個視圖發送對象到下一個
你是在有大量數據的(即具有ListBox
整個項目的視圖)的視圖。數據已從外部數據源下載,幷包含許多未在當前視圖中顯示的屬性。您想詳細查看以顯示此信息。
當您連接ListBoxItem
以導航至導航URL中附加的「id =」的新視圖時,您可以輕鬆地查詢您的數據源(即REST服務)給定ID參數。但是,數據已經在父視圖中可用 - 那麼如何以某種方式將此數據發送到下一個視圖 - 跳過對數據源的另一個調用並加快了應用程序的速度?
我確定有幾種方法可以做到這一點,但這是在不使用任何外部庫的情況下完成它的最簡單方法。
創建一個實用工具類 - NavigationUtility
(或其他) - 和實施結構如下:
public static class NavigationUtility
{
// The object to send
private static object passedObject = null;
// A method to fetch the object
public static object GetObject() {
// implementation below
}
// Utility method to check if an object was passed
public static bool HasObject()
{
return passedObject != null;
}
// A method to navigate to a page
public static void Navigate(string url, object obj = null)
{
// implementation below
}
}
這是你將實現的接口。它有一個私有變量,在視圖之間轉換時保持對象安全,以及導航和獲取發送信息的方法。
現在有幾件事情需要考慮才能以正確的方式實現。
NavigationService.Navigate(Uri)
方法,它還必須能夠處理不需要發送對象的情況。那麼讓我們來看看在我們的接口第一種方法 - GetObject
- 以及它是如何實現的:
public static object GetPassedObject()
{
var obj = passedObject;
passedObject = null;
return obj;
}
正如你看到的,我們通過在清空內部passedObject爲照顧需求#1輕鬆每次財產被提取。這將在以下方式運行(在接收視圖):
NavigationUtility.HasObject(); // returns true if an object was sent
var data = NavigationUtility.GetObject() as SomeModel; // fetches the object and casts it
NavigationUtility.HasObject(); // returns false always;
現在到了有趣的一點 - 實施Navigate
- 方法:
public static void Navigate(string url, object obj = null)
{
// Saves the object
passedObject = obj;
if(url != null && url.length > 0)
{
// Creates the Uri-object
Uri uri = new Uri(url, UriKind.Relative);
// Navigates the user (notice the funky syntax - so that this can be used from any project
(Application.Current.RootVisual as PhoneApplicationFrame).Navigate(uri);
}
}
就是這樣!
的幫助與應用程序對象創建的數據,你可以輕鬆地瀏覽你的對象數據,另一種觀點認爲,當你在做REST服務的調用來確保您的數據將設置爲您的應用程序對象太
你也可以使用json對象並將其設置爲任何全局對象
對不起 - 我對你在這裏做的事情有點困惑:你幾乎在你發佈問題的時候就提供了你自己的問題的答案。 – 2012-08-10 10:07:13
想到我會分享我的知識:-)我花了很多小時尋找一個很好的答案,最終找出了我自己的解決方案。 – 2012-08-10 10:33:33