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被渲染之前调用它,然后滚动它们自己排列的项目。
我创建了一个调用CommandManager.InvalidateRequerySuggested()的命令;它似乎根本不会调用CanExecute?我已经添加了行Thread.Sleep(1000);我的代理命令
。这似乎解决了这个问题。似乎我怀疑你必须在屏幕上呈现控件后调用RaiseCanExecuteChangedEvents()。显然这不是解决问题的可接受的方式。 – Russ 2010-01-25 16:27:12