написать строку в текстовый блок на другой странице в C #, UWP - PullRequest
0 голосов
/ 01 октября 2019

Как мне записать в TextBlock на другой странице?
До сих пор он работает только с TextBlocks на той же странице.
Функция async находится в Page_1. TextBlock включен Page_2.

public async void Serial() 
{
   string rxBuffer;
   //code
   //code
   //code

   while (true)
   {
      textblock_DebugRx_Gas_live.Text = rxBuffer;    
   } 
} 

Ответы [ 2 ]

2 голосов
/ 01 октября 2019

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

this.Frame.Navigate(typeof(SecondPage), someString);

ОднакоЕще более удачным решением является использование какой-либо инфраструктуры MVVM, в которой есть служба навигации на основе ViewModels, срок службы которой больше, чем у элементов управления / страницы UI. Такие фреймворки, как MvvvmCross, MvvmLight, SimpleMvvm или Reactive UI, могут помочь вам написать такую ​​логику более простым способом.

В вашем случае вы можете сохранить обновленное состояние в модели представления, которая затем будет использоваться обоимистраницы, поэтому любое изменение будет отражено в обоих местах. Вместо прямой записи в свойство Text TextBlocks, вы реализуете модель представления со свойством string, которая будет вызывать событие PropertyChanged из интерфейса INotifyPropertyChanged. Шаблон MVVM хорошо описан во многих руководствах, поэтому я советую вам в него углубиться.

2 голосов
/ 01 октября 2019

записать строку в текстовый блок на другой странице в C #, UWP

Если две страницы отображаются на переднем плане одновременно, как показано ниже.

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="1*"/>
        <RowDefinition Height="1*"/>
    </Grid.RowDefinitions>
    <StackPanel Margin="0,20,0,0" HorizontalAlignment="Center">
        <Button Click="Button_Click" Content="Click" />
        <TextBlock x:Name="Tbk" />
    </StackPanel>

    <Frame Grid.Row="1" VerticalAlignment="Center">
        <local:TestPage />
    </Frame>
</Grid>

Вы можетеиспользуйте Messenger для отправки сообщения с исходной страницы на целевую страницу.

using GalaSoft.MvvmLight.Messaging;

private void Button_Click(object sender, RoutedEventArgs e)
{
    var message = "Test";
    Messenger.Default.Send<string,TestPage>(message);
    Tbk.Text = message;
}

Целевая страница

public TestPage()
{
    this.InitializeComponent();
    this.Loaded += TestPage_Loaded;
}

private void TestPage_Loaded(object sender, RoutedEventArgs e)
{
    Messenger.Default.Register<string>(this, (s) =>
    {
        MyTextBlock.Text = s;
    });
} 
...