Windows Phone的导航 - 传递回页之前(Windows Phone Navigation

2019-06-23 22:45发布

我想点击一个按钮,带我到一个页面,然后点击列表框项,点击新网页上的按钮,并将其传递回页面之前没有创建第一页的一个新的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
        }

能不能做到?

谢谢

Answer 1:

你可以存储在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 


Answer 2:

您可以创建一个管理器类,将持有的会员ID。 这个管理器类然后可以从两个第一页和ChooseMember页面访问。

一个Singleton管理类的例子: -

public class MyManager
{
    private static MyManager _instance;

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


Answer 3:

我发现在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类

:在原来的解决方案如何通过在Windows Phone的网页之间的值



Answer 4:

像你想设置一些对象为另一个页面的背景声音给我。 消息在MVVM光听起来像一个很好的解决方案。 看起来并不像你使用MVVM所以这可能不会立即应用。 这个职位几乎勾画出我的意思在这里。

第二页
创建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;
}


Answer 5:

你可以简单地使用

//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));
}


文章来源: Windows Phone Navigation - Passing back to the page before