2012-04-25 2 views
3

Я бы хотел нажать на кнопку, чтобы перейти на страницу , затем нажмите на элемент списка, нажмите на кнопку на новой странице и перейдите на страницу прежде чем создавать новый URI первой страницы.Windows Phone Navigation - Возврат к странице до

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

Вы можете создать класс менеджера, который будет занимать идентификатор члена. После этого этот класс менеджера можно получить как с вашей первой страницы, так и с страницы ChooseMember.

Пример класса Singleton менеджер: -

public class MyManager 
{ 
    private static MyManager _instance; 

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

Как бы я получить доступ к классу менеджер с множеством членов в первой форме? Создание нового экземпляра класса manager просто создало бы новый экземпляр элемента, который был установлен – user1290653

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

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: PhoneApplicationService Class

Оригинальное решение на: How to pass values between pages in windows phone

+0

Хотя эта ссылка может ответить на вопрос, лучше включить здесь основные части ответа и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. – Rajesh

+0

Извините, ребята. Улучшил мой ответ. Пожалуйста, не уменьшайте сейчас. : P @iDev, Спасибо, приятель, я новичок в ответе на вопросы. –

Смежные вопросы