2017-02-22 49 views
0

Я работаю над проектом по разработке приложения UWP.Перегруженный конструктор не инициализируется на другой странице

Я получаю вышеупомянутую ошибку, когда я нажимаю кнопку, предназначенную для перехода к другому кадру.

Вот код первого кадра:

private void Search_Click(object sender, RoutedEventArgs e) 
    { 
     Submit(); 
    } 
    void Submit() 
    { 
      DateTime? pickupdate; 
      pickupdate = PickupDate.Date.DateTime; 
      DateTime? retdate; 
      retdate = ReturnDate.Date.DateTime; 

      Reservation res = new Reservation(pickupdate.Value.ToString("dd-MM-yyyy"), retdate.Value.ToString("dd-MM-yyyy")); 
      Frame.Navigate(typeof(Reservation)); 
    } 

И код для второго кадра:

public Reservation(string pickup, string _return) 
    { 
     InitializeComponent(); 
     PickupDateDisplay.Text = pickup; 
     ReturnDateDisplay.Text = _return; 
    } 

UPDATE:

Ok поэтому я перегрузил Reservation() конструктор, и теперь код для второго кадра выглядит следующим образом:

public Reservation() 
    { 
     InitializeComponent(); 
    } 

    public Reservation(string pickupdate,string retdate) 
    { 
     InitializeComponent(); 
     PickupDateDisplay.Text = pickupdate; 
     ReturnDateDisplay.Text = retdate; 
    } 

Теперь я не получаю никаких ошибок во время выполнения, но PickupDateDisplay.Text и ReturnDateDisplay.Text не меняют

+1

Читать ответ, делать то, что он говорит, если вы не можете исправить, вернуться [править] и добавить детали с тем, что вы нашли то, что вы пробовали , и что случилось. – Will

+0

Это происходит потому, что при навигации с использованием метода «Frame.Navigate» метод использует параметр less constructor данной страницы. Чтобы передать параметры на страницу при навигации, используйте [this] (https://social.msdn.microsoft.com/Forums/en-US/8cb42356-82bc-4d77-9bbc-ae186990cfd5/passing-parameters-during-navigation-in -windows-8? forum = winappswithcsharp) ... –

+0

Я работаю над UWP для Windows 10. Решение, которое вы предложили, предназначено для приложений Windows 8. @ MarianDolinský – Jestin

ответ

0

Это происходит потому, что Frame.Navigate метод, который используется для навигации используется параметр меньше конструктора данного стр. Чтобы передать параметры на целевую страницу, вы должны использовать перегрузку метода this.

void Submit() 
{ 
    DateTime? pickupdate = PickupDate.Date.DateTime; 
    DateTime? retdate = ReturnDate.Date.DateTime; 

    // This is useless, this instance is not used anywhere (Frame.Navigate creates its own new instance) 
    // Reservation res = new Reservation(pickupdate.Value.ToString("dd-MM-yyyy"), retdate.Value.ToString("dd-MM-yyyy")); 

    string[] parameters = { pickupdate.Value.ToString("dd-MM-yyyy"), retdate.Value.ToString("dd-MM-yyyy") }; 
    Frame.Navigate(typeof(Reservation), parameters); 
} 

Бронирование страницы:

string[] parameters; 

public Reservation() 
{ 
    Loaded += (sender, e) => 
    { 
     PickupDateDisplay.Text = parameters[0]; 
     ReturnDateDisplay.Text = parameters[1]; 
    } 

    InitializeComponent(); 
} 

// This ctor is useless too 
// public Reservation(string pickupdate,string retdate) 
// { 
// InitializeComponent(); 
// PickupDateDisplay.Text = pickupdate; 
// ReturnDateDisplay.Text = retdate; 
// } 

protected override void OnNavigatedTo(NavigationEventArgs e) 
{ 
    base.OnNavigatedTo(e); 
    parameters = (string[])e.Parameter; 
} 
+1

Спасибо. Это сработало – Jestin