【发布时间】:2019-04-11 06:25:38
【问题描述】:
我正在尝试使用 WPF 和 MVVM 的文本框构建状态栏,状态即将到来,但最终我希望它逐步到来。
我已经尝试过这段代码。
我还尝试在代码中提供Thread.Sleep(200);,但没有看到重大变化。
在 viewModel 中为 Status 创建一个属性
private string myStatus;
public string MyStatus
{
get { return myStatus; }
set
{
myStatus = value;
NotifyPropertyChanged("MyStatus");
}
}
并初始化它
public void LoadData()
{
MyStatus = "";
for(int i=0;i<list.Count();i++)
{
switch(list.ElementAt(i))
{
case -1:
MyStatus = "Negative value\n";
//Thread.Sleep(200);
break;
case 0:
MyStatus = "value is zero\n";
//Thread.Sleep(200);break;
case 1:
MyStatus = "Positive value\n";
//Thread.Sleep(200);
break;
}
}
}
并在视图中将其与属性绑定
<TextBox IsReadOnly="True" VerticalScrollBarVisibility="Visible" Name="tbMultiline" Text="{Binding MyStatus}" />
文本框正在填充,但最后我希望它在每次循环迭代期间发生。 UI 会冻结一段时间,并在后端代码完成后恢复。搜了一下,了解了dispatcher,谁能告诉我如何在MVVM模式中使用dispatcher在UI线程和渲染线程之间切换。
【问题讨论】:
-
这种情况发生得如此之快,以至于没有机会更新 UI,如果你想完成这项工作,你需要在每次调用之间暂停,以便 GUI 可以更新
-
是否在 UI 线程上调用 LoadData?您可能必须将其放入后台线程并分派到 UI 以使其按您想要的方式更新。
-
但是我可以很好地在控制台中看到这些状态。我写了 Console.WriteLine("status") 并且它一一出现@Denis
-
我不这么认为@KevinCook,我不知道 WPF 中的 UI 线程。我是这里的新手。到目前为止,我还没有在这里使用过线程。
-
“一个接一个”是什么意思?他们必须或多或少地紧随其后,没有任何延迟
标签: wpf mvvm dispatcher