首页 > 解决方案 > 数据最终不是一步一步来查看的;如何使用 Dispatcher 在 UI 线程和渲染线程之间切换?

问题描述

我正在尝试使用使用 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 会冻结一段时间,并在后端代码完成后恢复。我搜索了一下,我了解了调度程序,谁能告诉我如何在 MVVM 模式中使用调度程序在 UI 线程和渲染线程之间切换。

标签: wpfmvvmdispatcher

解决方案


我希望我能准确理解您的问题。您必须更改您的 xaml 端代码;

<TextBox IsReadOnly="True" VerticalScrollBarVisibility="Visible"  Name="tbMultiline" Text="{Binding MyStatus, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />

推荐阅读