2010-01-25 44 views
0

我有一個綁定到視圖模型集合的ListView。項目模板包含一個綁定到視圖模型上的命令的按鈕。當我設置ListView的ItemsSource的屬性時,我爲每個viewmodel調用RaiseCanExecuteChanged。調用RaiseCanExecuteChanged後ListView不更新

public BindingList<IVehicleViewModel> Vehicles 
    { 
     get { return _vehicles; } 
     set 
     { 
      if(_vehicles == value) return; 
      _vehicles = value; 
      OnPropertyChanged("Vehicles"); 
      RaiseCanExecuteChangedEvents(); 
     } 
    } 

儘管我已驗證返回true爲CanExecute上的所有視圖模型的按鈕顯示爲灰色。 我注意到的唯一的事情是,如果我在調用ListView時調用RaiseCanExecuteChanged,那麼所有東西都按預期工作,如果在listview被渲染之前調用它,然後滾動它們自己排列的項目。

回答

0

有一種靜態方法CommandManager.InvalidateRequerySuggested,它強制重新評估命令的可執行性(是一個單詞?)嘗試調用,只要你想確保你的UI更新,以反映你的命令的CanExecute結果的變化。

+0

我創建了一個調用CommandManager.InvalidateRequerySuggested()的命令;它似乎根本不會調用CanExecute?我已經添加了行Thread.Sleep(1000);我的代理命令 RaiseCanExecuteChangedEvents()中的Microsoft.Practices.Composite.Presentation.Commands – Russ 2010-01-25 12:27:08

+1

。這似乎解決了這個問題。似乎我懷疑你必須在屏幕上呈現控件後調用RaiseCanExecuteChangedEvents()。顯然這不是解決問題的可接受的方式。 – Russ 2010-01-25 16:27:12