0

考虑以下场景:

您在一个包含大量数据的视图中(即一个包含大量ListBox项目的视图)。数据已从外部数据源下载,并且包含许多未在当前视图中公开的属性。您想制作详细视图以显示此信息。

当您连接您ListBoxItem的 s 以在导航 URL 中使用附加的“id=”导航到新视图时,您可以使用给定的 ID 参数轻松地再次查询数据源(即 REST 服务)以获取数据。但是数据已经在父视图上可用了——那么你怎么能以某种方式将这些数据发送到下一个视图——跳过对数据源的另一个调用并加速你的应用程序呢?

4

2 回答 2

1

我确信有几种方法可以做到这一点,但这是在不使用任何外部库的情况下完成它的最简单方法。

创建一个实用程序类 - 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
    }
}

这是您将要实现的接口。它有一个私有变量,可以在视图之间转换时保证您的对象安全,以及用于导航和获取发送的信息的方法。

现在,您需要考虑一些事情才能以正确的方式实现这一点。

  1. 您必须只能获取传递的对象一次 - 否则粗心的使用可能会使错误的对象出现在程序的错误部分。
  2. 为了使用它而不是在NavigationService.Navigate(Uri)整个应用程序中导航的方法,它还必须能够处理不需要发送对象的情况。

那么让我们看看我们接口中的第一个方法GetObject——以及它是如何实现的:

public static object GetPassedObject() 
{
    var obj = passedObject;
    passedObject = null; 
    return obj;
}

如您所见,我们通过在每次获取属性时将内部传递对象清空来轻松满足需求#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);
    }
}

就是这样!

于 2012-08-10T09:34:07.120 回答
0

在使用应用程序对象创建数据的帮助下,当您调用 REST 服务时,您可以轻松地将对象数据导航到另一个视图,确保您的数据也将设置为您的应用程序对象

您还可以使用 json 对象并将其设置为任何全局对象

于 2012-08-10T09:45:38.300 回答