2

我有一个 web 服务调用,我想在 web 服务收到错误时更新 UI busyIndi​​cator 状态!这是viewmodel webservice调用完成方法中的代码:

if (e.Error != null)
                {
                    MessageBox.Show(msg);
                    busyIndicator.IsBusy = false;
                    return;
                }

我知道当它有多个线程时如何在另一个线程中更新 UI 对象,但是视图模型没有对 busyIndi​​cator 的引用!

4

2 回答 2

5

对于 MVVM 模式做这样的事情

XAML 文件

  <controlsToolkit:BusyIndicator BusyContent="Fetching Data Please Wait.." IsBusy="{Binding IsBusy}" >
            <Grid >....</Grid>
        </controlsToolkit:BusyIndicator>

查看模型类

private bool isBusy = false; 

public bool IsBusy 

{ 

    get { return isBusy; } 

    internal set { isBusy = value; OnPropertyChanged("IsBusy"); } 

不,您只需要为可以为您工作的属性设置值

类似于视图模型中的东西

    IsBusy = true; //or false

你有没有尝试过这样的事情,即使用 Dispatcher 来更新 UI

private void btnClick_Click(object sender, RoutedEventArgs e)
{
busyIndicator.IsBusy = true;
//busyIndicator.BusyContent = "Fetching Data...";

ThreadPool.QueueUserWorkItem((state) =>
{
Thread.Sleep(3 * 1000);
Dispatcher.BeginInvoke(() => busyIndicator.IsBusy = false);
});
}
于 2012-08-20T11:04:02.573 回答
1

将忙碌指示符内容绑定到字符串。并将值设置为您要显示的值。

if (e.Error != null)
            {
                MessageBox.Show(msg);
                busyIndicator.IsBusy = false;
                IndicatorMessage = "There has been an error"
                return;
            }

在您的 XAML 中,您执行标准绑定。

于 2012-08-20T12:27:56.970 回答