2012-04-25 70 views
3

之前,我想点击一个按钮,带我去 一个页面,然后点击列表框项,点击新网页上的按钮,并将其传递回页面,而不创建第一页的新URI。的Windows Phone导航 - 传回的网页

 **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 
     } 

可以吗?

谢谢

回答

2

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

一个Singleton管理类的一个实例: -

public class MyManager 
{ 
    private static MyManager _instance; 

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

我将如何与集成员访问管理器类,第一种形式:PhoneApplicationService Class

在原来的解决方案?创建经理类的新实例只会创建一个新的成员实例,它已被设置为 – user1290653 2012-04-25 13:37:35

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

即时通讯非常新,你能告诉我如何将它传递给App.xaml.cs文件,然后检索它吗? – user1290653 2012-04-25 13:31:17

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; 
} 
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)); 
} 
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:How to pass values between pages in windows phone

+0

虽然这个链接可能回答这个问题,但最好在这里包含答案的基本部分,并提供参考链接。如果链接页面更改,则仅链接答案可能会失效。 – Rajesh 2014-10-15 05:49:35

+0

对不起。改进了我的答案。请不要现在倒下。 :P @ iDev,谢谢哥们,我是回答问题的新人。 – 2014-10-15 06:12:29