如何将对象从一个视图发送到下一个视图

时间:2012-08-10 09:34:07

标签: c# windows-phone-7

考虑以下情况:

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

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

2 个答案:

答案 0 :(得分:1)

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

创建一个Utility类 - 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)方法进行导航,它还必须能够处理不需要发送对象的情况。
  3. 让我们看一下界面中的第一个方法 - GetObject - 以及它是如何实现的:

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

    如您所见,我们通过在每次获取属性时清空内部的passObject来轻松地处理需求#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);
        }
    }
    

    就是这样!

答案 1 :(得分:0)

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

您也可以使用json对象并将其设置为Any global object