0

我正在使用 MVVM 模式创建一个应用程序,我需要在其中从 RSS 提要加载数据。这需要一些时间,所以我想使用进度条来显示加载过程。如何在视图模型中使用 MVVM 模式通过异步和 IsBusy 状态来实现这一点?如果有人有,请提供代码。进度条的 UI 代码是:

<ProgressBar IsIndeterminate={Binding IsBusy} />

ViewModel 中的代码应该是什么?

4

2 回答 2

1

您还应该绑定Visibility属性。并且因为它需要Visibility枚举值,所以您必须使用BooleanToVisibilityConverter转换器:

<Resources>
    <BooleanToVisibilityConverter x:Key="BooleanToVisibility" />
</Resources>

<ProgressBar IsIndeterminate={Binding IsBusy}
             Visibility="{Binding IsBusy, Converter={StaticResource BooleanToVisibility}}" />
于 2013-03-03T16:34:41.500 回答
0

NotifyPropertyChanged对于您的 ViewModel,您只需要一个触发事件的 IsBusy 属性。

public class MyViewModel : INotifyPropertyChanged
{
    private bool _isBusy;

    public bool IsBusy
    {
        get { return _isBusy; }
        set
        {
            _isBusy = value;
            this.RaisePropertyChanged("IsBusy");
        }
    }

    private void BeginWorking()
    {
        this.IsBusy = true;
        //Do the work...
    }
    private void FinishWorking()
    {
        this.IsBusy = false;
    }

    //Other implementation, including INotifyPropertyChanged...
}

如果您不熟悉实施INotifyPropertyChanged,那么有许多资源可以帮助您。

正如先前的答案之一所暗示的那样,您需要使用将值BooleanToVisibilityConverter转换为值以显示/隐藏.boolVisibilityProgressBar

此外,除非您执行从后台线程检索 RSS 提要的工作,否则不会反映对 UI 的更改。否则,您将阻塞 UI 线程,并且您的 UI 将不会更新。

于 2013-03-03T16:58:10.633 回答