【问题标题】:Passing objects between classes in Windows Phone/C#在 Windows Phone/C# 中的类之间传递对象
【发布时间】:2012-04-18 09:16:08
【问题描述】:

我是 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));

有什么我错过的吗?你们有其他方法可以推荐吗?

非常感谢, -代码

【问题讨论】:

标签: c# windows-phone-7 xaml


【解决方案1】:

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

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

【讨论】:

  • 感谢 gBanFill 的链接。我会开始克服它们。 (视频很长)。有没有什么具体的东西可以告诉我如何像在 Objective-C 中一样传递一个对象,或者这在 C# 中是不支持的?这周我的时间很有限,无法尝试新的设计模式。
  • 不正确学习 mvvm 模式的最快方法是向应用程序类添加一个属性,您可以在调用导航之前设置该属性,然后在页面加载中检索。我不知道objective-c,所以对此无能为力。在火车上,因此无法将您指向视频的特定部分
  • 感谢 gbanfill,感谢您的建议。
【解决方案2】:
         var t1 = App.Current as App;
         t1.SSIDToken = stData1SSID;
         t1.CSRFToken = stData1CSRF;

这真的很好用,只需在 app.cs 文件中添加您需要的成员 (这里是:

公共字符串 SSIDToken {get;放;} 公共字符串 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 = "" ||字符串 CSRFTk = App.Current.CSRFToken;

【讨论】:

    【解决方案3】:

    您可能需要考虑一个具有可以存储当前会议对象的属性的管理器类。这将在您的 SelectionChanged 事件处理程序中设置,然后在您的 MeetDetails 页面中访问。管理器类是在您的页面外部定义的,因此可以从您的所有页面访问它。

    【讨论】:

    • 嗨,Paul,这是我考虑采用的用于节省时间的方法,因为它非常简单。但我并不总是想寻求最简单的解决方案,也从不学习新方法。感谢您的意见。
    猜你喜欢
    • 2017-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多