Progerssbar不会更新

时间:2016-08-15 10:27:57

标签: wpf mvvm

我试图在我的WPF应用程序中实现进度条。

所以我在我的观点中添加了一个

      <ProgressBar Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="3" Height="31"
               Minimum="0"
               Maximum="50"
             Value="{Binding CurrentProgress}" />

我的ViewModel获得了一个新属性:

 public int CurrentProgress
{
  get { return mCurrentProgress; }
  set
  {
    if (mCurrentProgress != value)
    {
      mCurrentProgress = value;
      RaisePropertyChanged("CurrentProgress");
    }
  }
}

当我的load命令执行时,它会为每个加载的文件引发Generated事件。 此事件的EventHandler为“当前进程”增加了+1。这样的财产:

private void GeneratedHandler(object sender, EventArgs eventArgs)
{
  CurrentProgress++;
}

但是我没有看到酒吧有任何进展。有人看到我做错了什么吗? 提前谢谢!

1 个答案:

答案 0 :(得分:1)

我已经尝试过复制你的问题了,但它在这里工作得很好。

无论如何,您可以遵循以下几个步骤:

  1. 确保您没有在UI线程上加载文件。如果是,请查看&#34;在执行冗长任务时显示进度&#34; this文章上。

  2. 确保DataContext的{​​{1}}正确无误,Window实施ViewModel并且您的System.ComponentModel.INotifyPropertyChanged方法正确无误。

  3. 以下是我使用过的代码(不要复制并粘贴app.xml ):

    <强>视图模型:

    RaisePropertyChanged

    <强> MainWindow.xml

    public class MainWindowViewModel : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
    
        public void NotifyPropertyChanged([CallerMemberName] string property = "")
        {
            if(PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(property));
            }
        }
    
        private int _Progress;
        public int Progress
        {
            get
            {
                return _Progress;
            }
    
            set
            {
                if(value != Progress)
                {
                    _Progress = value;
    
                    NotifyPropertyChanged();
                }
            }
        }
    }
    

    app.xaml

    <Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525"
        DataContext="{StaticResource ResourceKey=ViewModel_MainWindow}">
    <Grid>
        <ProgressBar Value="{Binding Progress}" Minimum="0" Maximum="50" />
    </Grid>