wpf progressbar databind to命令

时间:2011-07-14 17:41:45

标签: wpf progress-bar

我想以简单的方式使用进度条。我有一个查询,用于在用户单击按钮时将数据返回到网格。我想在单击按钮时启动进度条,并在数据返回到网格时停止进度条。

我只想让进度条继续(IsIndeterminate =“True”)以显示实际发生了某些事情。

有没有办法将进度条的开始和停止绑定到视图模型中的属性或命令?

感谢您的任何想法。

2 个答案:

答案 0 :(得分:1)

您可以公开一个属性,然后使用该属性来触发ProgressBar的可见性,但最好使用包含进度条的控件并公开打开/关闭它的属性。例如,扩展WPF工具包中的BusyIndicator

enter image description here

答案 1 :(得分:1)

使用IsIndeterminate属性作为属性绑定ViewModel上的属性;在本例中,我的标题为IsBusy

    public partial class Window1 : Window
    {
        public MyViewModel _viewModel = new MyViewModel();

        public Window1()
        {
            InitializeComponent();

            this.DataContext = _viewModel;
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            //this would be a command in your ViewModel, making life easy
            _viewModel.IsBusy = !_viewModel.IsBusy;
        }
    }

    public class MyViewModel : INotifyPropertyChanged
    {
        private bool _isBusy = false;
        public bool IsBusy
        {
            get
            {
                return _isBusy;
            }
            set
            {
                _isBusy = value;
                PropertyChangedEventHandler handler = PropertyChanged;
                if(handler != null)
                    handler(this, new PropertyChangedEventArgs("IsBusy"));
            }
        }

        #region INotifyPropertyChanged Members

        public event PropertyChangedEventHandler  PropertyChanged;

        #endregion
    }

在这种情况下,XAML使用Button的点击事件处理程序;但是在您的实例中,您只需绑定操作,它将开始处理ViewModel上的命令。

    <Grid>
           <ProgressBar Width="100" Height="25" IsIndeterminate="{Binding IsBusy}"></ProgressBar>
           <Button VerticalAlignment="Bottom" Click="Button_Click" Width="100" Height="25" Content="On/Off"/>
    </Grid>

当您开始工作并结束工作时,修改ViewModel上的IsBusy属性将启动停止不确定行为,提供活动/不 - 你追求的活跃视觉外观。