Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Silverlight Windows Phone导航-返回到之前的页面_Silverlight_Windows Phone 7_Navigation - Fatal编程技术网

Silverlight Windows Phone导航-返回到之前的页面

Silverlight Windows Phone导航-返回到之前的页面,silverlight,windows-phone-7,navigation,Silverlight,Windows Phone 7,Navigation,我想点击一个按钮把我带到一个页面 ,然后单击列表框项目,单击新页面上的按钮并将其传递回页面,而不创建第一个页面的新URI **First Page** private void btnAddExistingMember_Click(object sender, RoutedEventArgs e) { NavigationService.Navigate(new Uri("/ChooseMember.xaml", Uri

我想点击一个按钮把我带到一个页面 ,然后单击列表框项目,单击新页面上的按钮并将其传递回页面,而不创建第一个页面的新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
        }
能做到吗


谢谢

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

Singleton Manager类的一个示例:-

public class MyManager
{
    private static MyManager _instance;

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

您可以将成员存储在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 

听起来好像您想将某个对象设置为另一个页面的上下文。MVVM Light中的消息传递听起来是一个很好的解决方案。看起来您使用的不是MVVM,因此这可能不会立即适用。我在这里说的基本上都是这样

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

RaisePropertyChanged(SelectedObjectPropertyName, oldValue, value, true);
最后一个参数
true
表示向任何收听者广播此值的变化。您需要为listbox所选项目和按钮单击等连接一些其他命令,但我不会在这里讨论,因为它与您的问题没有直接关系。选择Listbox项将简单地为第一个页面设置您想要完成的数据项。点击按钮可以处理导航

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

Messenger.Default.Register<PropertyChangedMessage<MyObject>>(this, (action) => UpdateObject(action.NewValue));
你可以简单地使用

//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));
}
//第一页
受保护的覆盖无效OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
字符串值=string.Empty;
IDictionary queryString=this.NavigationContext.queryString;
if(queryString.ContainsKey(“memberID”))
{
memberID=queryString[“memberID”];
如果(成员ID!=“-1”)
//你的代码在这里
}
基地。导航到(e);
}
//第二页
私有无效btnAddSelected_单击(对象发送者,路由目标e)
{
成员currMember=(成员)lstMembers.SelectedItem;
字符串memberID=currMember.ID.ToString();
字符串target=“/FirstPage.xaml”;
target+=string.Format(“?memberID={0}”,memberID);
NavigationService.Navigate(新Uri(target,UriKind.Relative));
}

我在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()返回
并在导航到方法的
on中,获取以下代码

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:


原始解决方案位于:

我对此非常陌生,您能告诉我如何将App.xaml.cs文件传递给它,然后重新检索它吗?如何使用第一个表单中的set成员访问manager类?创建manager类的新实例只会创建已设置成员的新实例。虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接以供参考。如果链接页面更改,只有链接的答案可能会无效。对不起,伙计们。改进了我的答案。现在请不要投反对票P@iDev,谢谢你,老兄,我是新来回答问题的。
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"];
}