Передача непрерывных данных с одной страницы XAML на другую Windows 10

Я пытаюсь взять данные, которые я читаю с последовательного устройства на одной странице xaml, и передать их на другую. Я могу получить данные для перехода на другую страницу, но не постоянно. Это означает, например, что если бы я использовал событие textchanged, данные поступают с первой страницы, но только один раз. Это может быть потому, что данные не меняются все время? Иногда сохраненное значение считывается несколько раз перед изменением. Однако я также смоделировал данные, которые постоянно меняются, и все же событие срабатывает только один раз. В настоящее время я сохраняю строковое значение в app.xaml.cs с главной страницы, а затем читаю его со второй страницы. Я также пробовал со статическим классом, и оба они имеют одинаковые результаты. Я уверен, что это простое решение, но я не могу понять это. Любая помощь приветствуется.

На главной странице у меня есть это.

  App app = Application.Current as App;
  app.readData = rotAngle.ToString("F2");

а это на следующей странице

  private void rawValText_DataContextChanged(FrameworkElement sender, DataContextChangedEventArgs args)
    {            
        App app = Application.Current as App;
        rawValText.Text = app.readData;
    }

но он срабатывает только один раз при загрузке страницы.


person BigSquirmy    schedule 08.01.2016    source источник
comment
Вероятно, нужно добавить какой-то код для демонстрации. Я думаю, что вы должны использовать MVVM, если у вас есть частые изменения данных, которые должны отражать представление и/или информировать другой класс.   -  person Tyress    schedule 08.01.2016
comment
добавил немного кода. -Благодарность   -  person BigSquirmy    schedule 08.01.2016
comment
Где ваше событие textchanged?   -  person Tyress    schedule 08.01.2016
comment
У меня сейчас это текстовый блок, поэтому я использую DataContextChangedEvent   -  person BigSquirmy    schedule 08.01.2016


Ответы (2)


Используйте события. Используйте статический класс для этого.

Событие Fire, когда данные получены на странице 1.

Напишите обработчик события на странице 2 для получения события, инициированного на странице 1.

Простой !

person AnjumSKhan    schedule 08.01.2016
comment
Спасибо за ответ. Я пробовал это, но событие срабатывает только один раз. Мне нужно, чтобы он стрелял непрерывно - person BigSquirmy; 08.01.2016
comment
Две страницы активны все время в 2 отдельных кадрах? - person AnjumSKhan; 08.01.2016
comment
Только первая страница. Второй активен только пока вы на нем - person BigSquirmy; 08.01.2016
comment
Когда это не так, как вы ожидаете, он участвует в обработке событий - person AnjumSKhan; 08.01.2016
comment
Я не. Только когда вторая страница активна. - person BigSquirmy; 08.01.2016
comment
Вы хотите, чтобы страница 1 отправляла данные только тогда, когда страница 2 активна? - person AnjumSKhan; 08.01.2016
comment
Правильный. И это происходит, но только один раз. - person BigSquirmy; 08.01.2016
comment
обработайте событие Loaded страницы 2, подключите свой обработчик событий. на вашей стороне должна быть какая-то простая ошибка. - person AnjumSKhan; 08.01.2016
comment
утром перепроверю. У меня болят глаза :/ спасибо за помощь. Завтра выложу то, что найду. - person BigSquirmy; 08.01.2016

Похоже, вы неправильно используете DataContextChangedEvent. DataContextChangedEvent срабатывает при изменении DataContext. Вы должны использовать соответствующее событие. Вы можете либо найти MVVM и использовать INotifyPropertyChanged, либо вы можете продолжить свой путь и подписаться на событие на другой странице, о котором вы уведомляете с другой:

Как подписаться на события других классов в С#?

По сути, вы должны закодировать уведомление самостоятельно.

РЕДАКТИРОВАТЬ: Образец учебника по MVVM:

http://www.codeproject.com/Articles/126249/MVVM-Pattern-in-WPF-A-Simple-Tutorial-for-Absolute

person Tyress    schedule 08.01.2016
comment
Хорошо, я посмотрю на это. Есть ли преимущество перед тем или иным способом? - person BigSquirmy; 08.01.2016
comment
Я бы использовал MVVM просто потому, что он чище и с ним проще иметь дело с пользовательским интерфейсом (без проблем с потоками и т. д.), но тогда задействовано много XAML. Кроме того, если вы уже закончили свое приложение, используя программный код (то есть то, что вы делаете), я думаю, вы не захотите его переделывать. - person Tyress; 08.01.2016
comment
На самом деле, учитывая, что вы нацелены на универсальную Windows 10, MVVM будет лучшим выбором. - person Tyress; 08.01.2016
comment
Ах хорошо я вижу. Я посмотрю на это и постараюсь реализовать завтра. Спасибо. Я сообщу вам о результатах. - person BigSquirmy; 08.01.2016