【问题标题】:write string to textblock on different page in C#, UWP在 C#,UWP 中将字符串写入不同页面上的文本块
【发布时间】:2019-09-30 21:41:50
【问题描述】:

如何在其他页面上写入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;    
   } 
} 

【问题讨论】:

  • 我想我们需要更多详细信息,但也许您可以尝试使用 ApplicationData:docs.microsoft.com/en-us/windows/uwp/design/app-settings/…
  • 只需要创建一个公共类为 - CommonClass 并将静态字符串对象声明为 - txtObj 然后在 Page_1 上将值传递给公共类作为 - CommonClass.txtObj = "your string" 然后Page_2 load 将值传递给 TextBlock as - txtBlock.text = CommonClass.txtObj 也可以从 Frame.Navigate 传递数据
  • @TonicLoyal:你在Page_1 中是否有对Page_2 的引用,或者你试图访问的Page_2 在哪里?

标签: c# asynchronous uwp textblock


【解决方案1】:

在 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;
    });
} 

【讨论】:

  • 这太棒了。它完美地工作。安装 NuGet 的,就是这么简单 :)
【解决方案2】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多