2015-11-10 2 views
0

Итак, я пробовал следующее UWP Accessing Frame for page navigation through Usercontrol an Object? Но я получаю nullpointer.Изменить страницу внутри рамки из другого класса

У меня есть главная страница с расколом, рамкой и меню для гамбургеров. Отсюда я управляю страницами, которые загружаются в фрейм.
У меня также есть профиль, и я хочу вызвать новый вид, когда пользователь нажимает кнопку. Позвольте мне добавить код:

MainPage:

public sealed partial class MainPage : Page 

{ 

    Profile profile = new Profile(); 

    public MainPage() 
    { 
     this.InitializeComponent(); 
     MyFrame.Navigate(typeof(Financial)); 
     BackButton.Visibility = Visibility.Collapsed; 
     Title.Margin = new Thickness(68,0,0,0); 

     profile.OnNavigateParentReady += OnCreateUser; 

    } 

.... 



    public void OnCreateUser(object sender, RoutedEventArgs e) 
    { 
     if (MySplitView.Content != null) 
      ((Frame)MySplitView.Content).Navigate(typeof(CreateUser)); 
     Title.Text = "Create User"; 
     BackButton.Visibility = Visibility.Visible; 
     Title.Margin = new Thickness(0, 0, 0, 0); 

    } 

} 

И профиль:

public sealed partial class Profile : Page 

{ 

    public delegate void MyEventHandler(object source, RoutedEventArgs e); 

    public event MyEventHandler OnNavigateParentReady; 


    private string _profileName; 
    private string _password; 

    private Dictionary<string, string> usersDictionary = new Dictionary<string, string>(); 

    public Profile() 
    { 
     this.InitializeComponent(); 
     usersDictionary.Add("Casper", "12345"); 
    } 

    private void Login_Click(object sender, RoutedEventArgs e) 
    { 
     _profileName = ProfileName.Text; 
     _password = PasswordBox.Password; 

     if (usersDictionary.ContainsKey(_profileName)) 
     { 
      if (usersDictionary[_profileName] == _password) 
      { 
       ProfileName.Text = "LOGIN SUCCES!"; 
      } 
     } 
     else 
     { 

     } 
    } 

    private void CreateUser_Click(object sender, RoutedEventArgs e) 
    { 
     OnNavigateParentReady(sender, e); 
    } 
} 

я могу изменить кадр без проблем с помощью Frame.navigate но я хочу, чтобы изменить название, а также края и все остальные OnCreateUser. Как мне это сделать?

EDIT: Я должен сказать, что я получаю NullPointer на этой линии: OnNavigateParentReady(sender, e);

ответ

2

Это пустая ссылка исключение, потому что OnNavigateParentReady событие не имеет слушателей еще, когда Click событие вызывается на вашем CreateUser управления. Вы должны попробовать следующее:

if (OnNavigateParentReady != null) 
{ 
    OnNavigateParentReady(sender, e); 
} 

Кроме того, profile объект, который вы создаете внутри MainPage класса - где он используется? Это когда-нибудь показано где-нибудь? Кажется, что этот объект не тот, который появляется в вашем приложении. Вместо этого используется другой экземпляр Profile!

Поле profile члена вашего MainPage класс, вероятно, не является Page, фактически отображающимся при навигации. Попробуйте установить прослушиватель событий на фактическом отображаемом объекте Profile.

+0

Он разрешил сбой, но кадр не меняется, кажется, что метод не называется должным образом. – Evilunclebill

+0

Он используется здесь: 'profile.OnNavigateParentReady + = OnCreateUser;' – Evilunclebill

+0

Я довольно новичок в C#. Не совсем уверен, как установить прослушиватели событий? – Evilunclebill

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