在Windows Phone / C#中的类之间传递对象

时间:2012-04-18 09:16:09

标签: c# windows-phone-7 xaml

我是Windows Phone和C#的新手,享受Objective-C和Java的变化。

我无法找到将对象从一个类传递到另一个类的方法。我在MSDN上看到了一些示例代码,但我认为它可能不适用于我需要的内容。

    private void meetingList_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        if (meetingList.SelectedIndex != -1)
        {
            Meeting aMeeting = (Meeting)meetingList.SelectedItem;
            this.NavigationService.Navigate(new Uri("/MeetDetails.xaml", UriKind.Relative));
            ApplicationBar.IsVisible = true;
        }
    }

如何将会议对象'aMeeting'传递到我的MeetDetails类,以便我可以向用户显示所有详细信息。

我知道我可以将其分解,并通过使用类似的内容传递来自'aMeeting'的所有变量:

this.NavigationService.Navigate(new Uri("/MeetDetails.xaml?Meeting=" +
            aMeeting.meetName + "&TheDate=" +
            aMeeting.meetDate, UriKind.Relative));

有什么我错过的吗?你们会推荐其他方式吗?

非常感谢, -code

3 个答案:

答案 0 :(得分:2)

您发布的内容是传输有关该地点的简单数据的好方法。但是,当您必须在页面之间传递复杂对象时,它会变得很痛苦。

推荐的方法是使用MVVM模式(来自wikipediaMSDN)。这为您提供了一种通过使用数据绑定将View与其他所有内容分开的方法。我见过的最好的教程是观看videos on MSDN

答案 1 :(得分:0)

您可能需要考虑具有可存储当前Meeting对象的属性的manager类。然后,这将在SelectionChanged事件处理程序中设置,然后在MeetDetails页面中进行访问。经理类在您的页面外部定义,以便可以从您的所有页面访问它。

答案 2 :(得分:0)

         var t1 = App.Current as App;
         t1.SSIDToken = stData1SSID;
         t1.CSRFToken = stData1CSRF;

这样做真的很好,只需在app.cs文件中创建你需要的成员 (这是:

public string SSIDToken {get;组;} public string CSRFToken {get;设置;}

然后创建顶部代码以创建var作为临时缓冲区。 如果要返回值,请使用相同的代码:

     var t1 = App.Current as App;
     thisisatextbox.Text = t1.SSIDToken;
     thisisalsoatextbox.Text = t1.CSRFToken;

更多信息; http://www.eugenedotnet.com/2011/07/passing-values-between-windows-phone-7-pages-current-context-of-application/

编辑:经过几个月的经验,发现你可以添加

public static new App Current
{
    get { return Application.Current as App; }
}

在App.xaml(在公共类App中)能够调用App.Current而不必每次都声明它!

现在您可以使用App.Current.CSRFToken =“”|| string CSRFTk = App.Current.CSRFToken;