2012-04-25 84 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