Wpf 调用RaiseCanExecuteChanged后ListView未更新

Wpf 调用RaiseCanExecuteChanged后ListView未更新,wpf,listview,mvvm,itemtemplate,Wpf,Listview,Mvvm,Itemtemplate,我有一个绑定到视图模型集合的ListView。项目模板包含绑定到视图模型上的命令的按钮。当我设置ListView的ItemsSource为每个viewmodel调用的RaiseCanceTechChanged属性时 public BindingList<IVehicleViewModel> Vehicles { get { return _vehicles; } set { if(_vehicles

我有一个绑定到视图模型集合的ListView。项目模板包含绑定到视图模型上的命令的按钮。当我设置ListView的ItemsSource为每个viewmodel调用的RaiseCanceTechChanged属性时

public BindingList<IVehicleViewModel> Vehicles 
    {
        get { return _vehicles; }
        set 
        { 
            if(_vehicles == value) return;
            _vehicles = value;
            OnPropertyChanged("Vehicles");
            RaiseCanExecuteChangedEvents();
        }
    }
公共绑定列表车辆
{
获取{返回_车辆;}
设置
{ 
如果(_vehicles==值)返回;
_车辆=价值;
不动产变更(“车辆”);
RaiseCanExecuteChangedEvents();
}
}
尽管我已经验证了在所有视图模型上CanExecute返回true,但按钮显示为灰色。
我注意到的唯一一件事是,如果我在listview已经呈现时调用RaiseCanExecuteChanged,一切都会按预期进行,如果我在listview呈现之前调用它,然后滚动它们自己排序的项目。

有一个静态方法
CommandManager.invalidateRequestSuggested
强制重新评估命令的可执行性(这是一个词吗?)只要您想确保UI更新以反映命令执行结果中的更改,请尝试调用该命令。

我创建了一个调用CommandManager.InvalidateRequestSuggested()的命令;它似乎根本不叫CanExecute?我是Microsoft.Practices.Composite.Presentation.Commands中的DelegateCommand在raiseCanceTechChangedEvents()中,我添加了行Thread.Sleep(1000);这似乎解决了问题。我似乎怀疑,在屏幕上呈现控件后,必须调用RaiseCanceTechChangedEvents()。显然,这不是一个可以接受的解决问题的方法。