如何在viewmodel方法中更新busyIndi​​cator状态?

时间:2012-08-20 10:56:35

标签: c# silverlight mvvm

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

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

我知道如何在有多个线程的情况下更新另一个线程中的UI对象,但是viewmodel没有对busyIndi​​cator的引用!

2 个答案:

答案 0 :(得分:5)

对于MVVM模式,做类似的事情

XAML文件

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

VIew Model class

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);
});
}

答案 1 :(得分:1)

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

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

在您的XAML中,您可以进行标准绑定。