【发布时间】:2021-12-11 23:38:21
【问题描述】:
我遇到以下情况:我正在尝试将文件加载到应用程序中(这是一个使用 Caliburn Micro 的基于 C# 的 WPF 应用程序)。
这个文件的性质并不重要,但加载过程包含许多步骤,对于大文件,可能需要一段时间才能完成。
我想要做的是在我的应用程序中显示一个模态对话框,该对话框在加载过程开始时显示,最后关闭并在加载过程中由应用程序更新,以便对话框中的文本反映应用程序已到达加载过程中。
我已经通过在对 windowmanager.ShowDialog() 的调用中传入关联的视图模型来显示视图,但是没有任何反应。我只能假设这是因为对话框可能是同步显示的,因此永远不会到达完成加载和更新对话框的后续调用。
本质上这是我目前正在尝试的事情(VM 有一个在视图中使用的消息字符串属性):
windowManager.ShowDialog(ProgressDialogVM);
doSomething();
ProgressDialogVM.Message = "Step 2";
doSomethingElse();
ProgressDialogVM.Message = "Step 3";
doSomethingElseAgain();
ProgressDialogVM.Message = "Step 4";
ProgressDialogVM.TryClose();
对话框 VM 中的属性如下所示:
private string message = "";
public string Message
{
get
{
return message;
}
set
{
if (value != message)
{
message = value;
NotifyOfPropertyChange(nameof(message));
}
}
}
最后是用于文本框的 XAML,以防此处相关:
<TextBlock Grid.Row="1" Text="{Binding Path=Message, UpdateSourceTrigger=PropertyChanged}" />
任何关于如何做到这一点的想法将不胜感激。
编辑 我已经到了可以显示窗口并让代码执行的地步了。我什至可以在视图模型中成功设置属性并在窗口中显示初始值。然而,现在的问题是该值虽然可以设置,但并未在相应的视图中更新。它非常高兴地显示了初始值,但在那之后没有任何变化。
因此,在窗口下方的测试示例中,窗口将显示“步骤 0”,但不会更新为显示“步骤 1”。
ProgressDialogViewModel ProgressDialogVM = new ProgressDialogViewModel();
ProgressDialogVM.Message = "Step 0";
windowManager.ShowWindow(ProgressDialogVM, null, null);
ProgressDialogVM.Message = "Step 1";
【问题讨论】:
-
什么是
ProgressDialogVM?它是否继承自MessageBox? -
它继承自 Screen。 MessageBox 似乎是一个密封类。
标签: c# wpf caliburn.micro