Windows Phone导航 - 之前返回页面

时间:2012-04-25 13:17:33

标签: silverlight windows-phone-7 navigation

我想点击一个按钮将我带到一个页面 ,然后单击列表框项,单击新页面上的按钮并将其传递回页面,而不创建第一页的新URI。

        **First Page**
        private void btnAddExistingMember_Click(object sender, RoutedEventArgs e)
        {
              NavigationService.Navigate(new Uri("/ChooseMember.xaml", UriKind.Relative));
        }

        **Second page after choosing listbox value**
        private void btnAddSelected_Click(object sender, RoutedEventArgs e)
        {
              Member currMember = (Member)lstMembers.SelectedItem;
              string memberID = currMember.ID.ToString();
              //navigate back to first page here passing memberID
        }

可以吗?

谢谢

5 个答案:

答案 0 :(得分:3)

您可以将该成员存储在App.xaml.cs文件中。这是应用程序中所有文件的常用文件。 这就像一个全局变量。

//App.xaml.cs
int datafield ;

//Page1xaml.cs
(App.Current as App).dataField =10;

//Page2.xaml.cs
int x =  (App.Current as App).dataField 

答案 1 :(得分:2)

您可以创建一个包含成员ID的经理类。然后可以从第一页和ChooseMember页面访问此经理类。

Singleton Manager类的示例: -

public class MyManager
{
    private static MyManager _instance;

    public static MyManager Instance
    {
        get
        {
            if (_instance == null)
            {
                _instance = new MyManager();
            }
            return _instance;
        }
    }
}

答案 2 :(得分:2)

我在codeproject找到了一个对我非常有用的解决方案。

从第二种表单移动时,请将数据保存在PhoneApplicationService.Current.State

protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
{
    // Called when a page becomes the active page in a frame
    base.OnNavigatedFrom(e);
    // Text is param, you can define anything instead of Text 
    // but remember you need to further use same param.
    PhoneApplicationService.Current.State["Text"] = txtboxvalue.Text;
}

使用相同的NavigationService.GoBack();OnNavigatedTo方法返回,获取以下代码。

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
    base.OnNavigatedTo(e);
    if (PhoneApplicationService.Current.State.ContainsKey("Text"))
    txtvalue.Text = (string)PhoneApplicationService.Current.State["Text"];
}

参考文献:

MSDN:PhoneApplicationService Class

原始解决方案:How to pass values between pages in windows phone

答案 3 :(得分:1)

听起来我想要将某个对象设置为另一个页面的上下文。 MVVM Light中的消息听起来像是一个很好的解决方案。看起来您不是在使用MVVM,因此可能无法立即应用。 This post几乎列出了我在这里所说的内容。

第二页
创建SelectedObject属性并确保调用

RaisePropertyChanged(SelectedObjectPropertyName, oldValue, value, true);

最后一个参数true表示将此值的更改广播给任何正在收听的人。你需要为列表框选择的项目和按钮点击等连接一些其他命令,但我不会在这里进入,因为它与你的问题没有直接关系。选择列表框项将只是为您想要完成的第一页设置数据项。点击按钮可以处理导航。

第一页
在您的视图模型构造函数中,注册以接收从第二页广播的更改

Messenger.Default.Register<PropertyChangedMessage<MyObject>>(this, (action) => UpdateObject(action.NewValue));

然后定义UpdateObject

private void UpdateObject(MyObject newObject)
{
    LocalObjectProperty = newObject;
}

答案 4 :(得分:1)

您只需使用

即可
//first page
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
    string value = string.Empty;
    IDictionary<string, string> queryString = this.NavigationContext.QueryString;
    if (queryString.ContainsKey("memberID"))
    {
        memberID = queryString["memberID"];
        if (memberID != "-1")
            //your code here
    }
    base.OnNavigatedTo(e);
}

//second page
private void btnAddSelected_Click(object sender, RoutedEventArgs e)
{
    Member currMember = (Member)lstMembers.SelectedItem;
    string memberID = currMember.ID.ToString();

    string target = "/FirstPage.xaml";
    target += string.Format("?memberID={0}", memberID);
    NavigationService.Navigate(new Uri(target, UriKind.Relative));
}