【发布时间】:2023-03-26 09:24:01
【问题描述】:
我的视图模型中有以下代码。它有三种不同的状态,令我困惑的是,第一个和最后一个状态显示在控件中,但进度没有。
public void DoStuffForAWhile(int limit)
{
TheBoundProperty = "This is not shown.";
DateTime start = DateTime.Now;
TimeSpan elapsed;
do
{
elapsed = new TimeSpan(DateTime.Now.Ticks - start.Ticks);
TheBoundProperty = "Neither is this.";
} while (elapsed.TotalSeconds < limit);
TheBoundProperty = "But this is!";
}
绑定设置正确,因为我在创建视图模型时看到了起始文本。我看到了更新程序的最后一条文本。另外,属性的set方法被命中,值为未显示的字符串。
关于为什么不显示这些值的任何提示?如何解决问题?
【问题讨论】:
-
您更新属性的频率太高,其更新正在丢失。
-
@KonradViltersten 您的循环在 UI 线程上运行并阻止它,
TheBoundProperty引发的事件在能够这样做之前不会被处理。在后台线程上运行长时间运行的任务并通过调度程序引发属性更改事件 -
@Marko 我不确定你是否正确。我已经测试过添加延迟,但这并没有影响任何事情。我怀疑这与 dkozl 提到的有关。
-
@dkozl 建议如何解决呢?
标签: c# wpf xaml data-binding