【发布时间】: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