2010-01-25 83 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