【发布时间】:2015-02-24 04:04:37
【问题描述】:
我有一个 MVVM 模型
查看
<StatusBar>
<StatusBarItem>
<TextBlock Text="{Binding Status, UpdateSourceTrigger=PropertyChanged}" Width="Auto"/>
</StatusBarItem>
</StatusBar>
视图模型
ViewModel()
{
public string Status { get; set; }
void UpdateProcess()
{
UpdateStatus("Updating Database");
Thread.Sleep(TimeSpan.FromSeconds(5));
UpdateStatus("Database updated");
}
void UpdateStatus(string message)
{
Status = message;
OnPropertyChanged("Status");
}
}
应用程序运行时,在“更新数据库”之后只显示“更新数据库”而不是“更新数据库”。 似乎只有在 UpdateProcess 方法运行后视图才会更新
我需要在属性更改后立即更新视图。这可能吗?
即使我逐步调试代码,UI 在通过第一个 OnPropertyChanged 时也不会更新。整个 UpdateProcess() 完成后,UI 将更改为“数据库已更新”。
【问题讨论】:
-
如果没有真正的代码示例,很难知道您在这里实际要求的是什么。如果您像这样连续使用两条消息逐字更新
Status属性,即使您强制UI 在两次更新之间进行更新,用户也不会注意到。这些天电脑太快了。你的实际情况是什么?您要解决什么具体问题? -
您是否希望 Message1 闪烁一秒钟?例如,您需要实现一个计时器。否则,在我看来,它正在按预期工作。你预计会发生什么?
-
使线程进入睡眠状态。它仍然没有按我的预期运行。 @user2588666
-
@Shorn,Sleeping会阻塞UI线程,意味着永远不会渲染更新; UI 将在 5 秒内无响应。如果您想在后台运行时更新 UI,您需要使用某种异步处理机制并将您的状态更新分派到 UI 线程。