如何在 UWP 中从另一个 class 更新项目 xaml

How to update item xaml from another class in UWP

大家好我是 UWP 开发的新手,我在网上搜索了很多但我没有找到实现我目标的正确方法,我想做的是更新 ui通过使用属于 UiUpdate class 的 class 来更新我的 MainPage。这是我想要得到的,这是我的主页:

namespace Test_App
{
    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();
        }
    }
}

这是与我的 MainPage 关联的亲戚 xaml:

<Page
    x:Class="Test_App.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:Test_App"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    xmlns:controls="using:Microsoft.Toolkit.Uwp.UI.Controls"
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <Grid>
        <controls:DockPanel>
            <controls:DockPanel Visibility="Visible"  HorizontalAlignment="Left" >
                <Grid>
                    <TextBlock x:Name="text_one"  HorizontalAlignment="Right" Margin="0,50,46,0" VerticalAlignment="Center" FontWeight="Bold" />
                    <TextBlock  x:Name="text_two" HorizontalAlignment="Left" VerticalAlignment="Bottom" FontWeight="Medium" />

                </Grid>
            </controls:DockPanel>
    </Grid>
</Page>

现在通过 UiUpdate class,我想更新我的 TextBlocks 或我 UI 的任何其他元素,我在网上找到了类似的东西:

await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync (CoreDispatcherPriority.Normal, () =>
             {
                 // Update texboxt

             });

但我无法以任何方式访问 UiUpdate class MainPage 的 texbox 元素我无法访问 MainPage.text_one ..,我也找不到合适的文档与实现我的 UWP 应用程序要应用的模式或其他有关的问题

How to update item xaml from another class in UWP

为了解释这个问题,你可能需要参考UWP mvvm design,你提到UiUpdate最像ViewModel。

例如

<Page.DataContext>
    <local:UiUpdate x:Name="ViewModel" />
</Page.DataContext>
<Grid>
    <TextBlock
        x:Name="text_one"
        Margin="0,50,46,0"
        HorizontalAlignment="Right"
        VerticalAlignment="Center"
        FontWeight="Bold"
        Text="{Binding TextBlockText}" />
    <Button VerticalAlignment="Bottom" Click="Button_Click">Update</Button>
</Grid>

代码隐藏

public sealed partial class MainPage : Page
{
    public MainPage()
    {
        this.InitializeComponent();
    }
    private Random random = new Random();
    private void Button_Click(object sender, RoutedEventArgs e)
    {         
        ViewModel.TextBlockText = $"Text-----{random.Next(15)}";
    }
}

public class UiUpdate : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    public void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));

    }
    private string _textBlcokText;
    public string TextBlockText
    {
        get
        {
            return _textBlcokText;
        }
        set
        {
            _textBlcokText = value;
            OnPropertyChanged();
        }
    }

}