将字符串写入 C#、UWP 中不同页面上的文本块

write string to textblock on different page in C#, UWP

如何在不同的页面上写入 TextBlock
到目前为止,它仅适用于同一页面上的 TextBlocks
async 函数在 Page_1 中。 TextBlockPage_2.

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

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

write string to textblock on different page in 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;
    });
} 

通常,页面一次显示一个页面,因此如果您想在导航期间在它们之间传递数据,您应该使用 Frame.Navigate 方法的第二个参数:

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

然而,更好的解决方案是使用某种 MVVM 框架,它具有基于 ViewModel 的导航服务,其生命周期比 UI controls/page 更长。 MvvvmCross、MvvmLight、SimpleMvvm 或 Reactive UI 等框架都可以帮助您更轻松地编写此类逻辑。

在您的情况下,您可以将更新后的状态存储在视图模型中,然后由两个页面共享,因此任何更改都会反映在两个地方。与其直接写入 TextBlocksText 属性,不如使用 string 属性 实现视图模型,这会触发 PropertyChanged 来自 INotifyPropertyChanged 界面的事件。 MVVM 模式在许多教程中都有很好的描述,因此我鼓励您深入研究它。