【问题标题】:update label text through MainPage Helper class通过 MainPage Helper 类更新标签文本
【发布时间】:2022-10-16 17:19:37
【问题描述】:

为了简化我的场景,我在 MAUI 应用程序中有一个标签和一个按钮。 我想通过主页助手类而不是主页类来更新标签文本。

主页.xaml

<Button
    x:Name="OrganizeBtn"
    Text="Organize"
    IsEnabled="False"
    Clicked="OnOrganizeClicked"
    HorizontalOptions="Center" />

<Label x:Name="completionMsg"
    FontSize="32"
    HorizontalOptions="Center" />

MainPage.xaml.cs

private void OnOrganizeClicked(object sender, EventArgs e)
    {
        completionMsg.Text = "";
        MainPageHelper mh = new FileManager();
        int fileCount = mh.OrganizeFiles(folderPath.Text);
        completionMsg.Text = "Moved " + fileCount + " files!";
    }

public void UpdateCompletionText(string text)
    {
        completionMsg.Text = "Moving " + text + "...";
    }

MainPageHelper.cs

public int OrganizeFiles(string folderToOrganize)
        {
            foreach (string folder in listOfFolders)
            {
                Directory.CreateDirectory(folderToOrganize + "\\" + folder);
                MainPage mp = new MainPage();
                mp.UpdateCompletionText(currentFile);  <--- want to update the label here
            }
        }

在这里,当我通过保留断点进行调试时,调用将转到 MainPage 中的UpdateCompletionText 函数。但是文本没有更新。

我怎样才能得到这个工作?

【问题讨论】:

  • 您的助手类正在创建一个新实例的 MainPage 而不是引用现有实例正在向用户显示。即使您解决了这个问题,用户界面也会更新得太快而无法被用户看到
  • 如何获取现有实例而不是创建新实例?
  • 创建助手类时传递引用。但这仍然是糟糕的设计。更好的方法是让助手在每次处理文件时引发一个事件,然后 UI 可以订阅该事件并自行更新。无论如何,正如我之前提到的,这两种方法都不可能产生好的用户体验结果。

标签: c# label maui winui-3 winui


【解决方案1】:

如果助手要能够更新页面,它需要对页面实例的引用。

你可以用一个注入它:

MainPageHelper.cs:

private MainPage _mainPage;

//constructor:
public MainPageHelper(MainPage mainPage)
{
    _mainPage = mainPage;
}

public int OrganizeFiles(string folderToOrganize)
{
    foreach (string folder in listOfFolders)
    {
        Directory.CreateDirectory(folderToOrganize + "\" + folder);
        _mainPage.UpdateCompletionText(currentFile);
    }
}

MainPage.xaml.cs:

private void OnOrganizeClicked(object sender, EventArgs e)
{
    completionMsg.Text = "";
    MainPageHelper mh = new MainPageHelper(this);
    int fileCount = mh.OrganizeFiles(folderPath.Text);
    completionMsg.Text = "Moved " + fileCount + " files!";
}

【讨论】:

    猜你喜欢
    • 2023-02-23
    • 2020-03-09
    • 1970-01-01
    • 2020-04-08
    • 1970-01-01
    • 1970-01-01
    • 2022-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多