我有一个毛伊岛应用程序只运行在Android(斑马扫描枪)。
当我点击屏幕上的一个按钮时,运行的进程可能需要30秒才能完成。在这30秒内,我更新ObservableProperty的值,以便在处理继续时向用户给予更新。目前,结果是UI在将控制返回到屏幕之前不会刷新。
当我使用CommunityToolkit.Mvvm
时,SetProperty
由内部代码调用,我希望它刷新UI。
下面是一些相关代码:
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
namespace myNamespace
{
public partical class MyClassVM: ObservableObject
{
[ObservableProperty]
string status;
[RelayCommand]
void DoStuff()
{
var myUseCase = new DoStuffUseCase();
myUseCase.Execute(UpdateStatus)
}
public void UpdateStatus(string text, bool isThreadRunning)
{
Status = text;
}
}
}
下面是我的Execute用例的定义:
public void Execute(Action<string, bool> callback)
{
callback("Begin", true);
// do stuff which sometimes takes a few seconds
callback("End", false);
}
下面是我XAML:
<Label x:Name="lblStatus"
Text="{Binding Status}"
HorizontalTextAlignment="Center"
FontSize="20"
TextColor="DarkRed"
FontAttributes="Bold"
Margin="0,20,0,0"/>
结果是用户永远看不到“开始”消息。只有在过程完成后的结束消息。
1条答案
按热度按时间dxxyhpgq1#
您可以尝试为函数
Execute
添加async-await
。根据你的代码,我做了一个测试,它在我这边工作正常。
请参考以下代码: