2012-11-04 71 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)); –

相關問題