2012-11-04 33 views
3

我有基于MVVM模式的wpf应用程序。 我有恼人的问题,我无法确定如何解决它。button isEnabled = true没有鼠标点击无法工作WPF MVVM

我的应用程序是向导应用程序,当用户按下“下一步”时,我开始在另一个线程(backgroundworker)中取得一些进展,当bgWorker开始时,他设置CanMoveNext = false绑定到Next按钮的isEnabled属性,当bgworker完成他设置了CanMoveNext = true;

CanMoveNext获得IsEnabled = false UI将立即显示,但在isEnabled propery设置回true后,UI会在点击鼠标或键盘按下按钮后执行刷新。

m changing the property I中号使用OnPropertyChanged()方法后,我甚至尝试使用CommandManager.InvalidateRequerySuggested();但它`仍然没有获得点击鼠标刷新。

我该如何解决这个问题?

这里是我的代码:

 public override bool CanMoveNext 
     { 
      get 
      { 
       return canMoveNext; 
      } 
      set 
      { 
       canMoveNext = value; 
       OnPropertyChanged("CanMoveNext"); 
      } 
     } 



    public void StartProgress() 
      { 

       CanMoveNext = false; 
       InitBGworkers(out bgStartPersonalWorker); 
    bgStartPersonalWorker.RunWorkerAsync(); 
    } 



     void bgStartPersonalWorker_DoWork(object sender, DoWorkEventArgs e) 
     { 
      DoStuff(); 
     } 



     void bgStartPersonalWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
       { 
    CanMoveNext = true; 
//Even CommandManager.InvalidateRequerySuggested(); doen`t help 
       } 

//代码从XAML

<Button Content="{Binding ButtonNextCaption}" IsEnabled="{Binding CanMoveNext, UpdateSourceTrigger=PropertyChanged}" Command="{Binding Path=NavigateNextCommand}" Margin="5,0,5,0" Width="100" Height="40" FontSize="14" FontWeight="Bold"/> 

感谢

+0

只是胡乱出手,但你有没有尝试从UI线程设置属性?例如使用“Dispatcher.Invoke”设置CanMoveNext? – Blachshma

+0

是的,没有成功 – Ofir

+0

好吧我想通了 - 你的评论帮助我罚款解决方案 – Ofir

回答

1

我想怎么解决这个问题:

  Application.Current.Dispatcher.BeginInvoke(new ThreadStart(() => 
      { 
       CommandManager.InvalidateRequerySuggested(); 

      })); 
+0

使用方法组: Application.Current.Dispatcher.BeginInvoke(新的ThreadStart(CommandManager.InvalidateRequerySuggested)); –

相关问题