3

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

可以吗?

谢谢

4

5 回答 5

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 
于 2012-04-25T13:27:57.467 回答
2

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

单例管理器类的示例:-

public class MyManager
{
    private static MyManager _instance;

    public static MyManager Instance
    {
        get
        {
            if (_instance == null)
            {
                _instance = new MyManager();
            }
            return _instance;
        }
    }
}
于 2012-04-25T13:20:38.370 回答
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:电话应用服务类

原始解决方案:如何在 windows phone 中的页面之间传递值

于 2014-10-15T04:58:54.253 回答
1

在我看来,您想将某个对象设置为另一个页面的上下文。MVVM Light 中的消息传递听起来是一个很好的解决方案。看起来您没有使用 MVVM,因此这可能不会立即适用。这篇文章几乎阐述了我在这里所说的内容。

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

RaisePropertyChanged(SelectedObjectPropertyName, oldValue, value, true);

最后一个参数true表示将这个值的变化广播给任何收听的人。您需要为列表框选定项目和按钮单击等连接一些其他命令,但我不会在这里讨论,因为它与您的问题没有直接关系。选择 Listbox 项将简单地设置第一页的数据项,就像您想要完成的那样。按钮点击可以处理导航。

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

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

然后定义 UpdateObject

private void UpdateObject(MyObject newObject)
{
    LocalObjectProperty = newObject;
}
于 2012-04-26T00:38:27.163 回答
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));
}
于 2013-01-17T05:59:18.970 回答