调用RaiseCanExecuteChanged后ListView不会更新

时间:2010-01-25 09:39:49

标签: wpf listview mvvm itemtemplate

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

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

尽管我已经确认在所有视图模型上为CanExecute返回了true,但按钮显示为灰色。 我唯一注意到的是,如果我在列表视图已经渲染时调用了RaiseCanExecuteChanged,一切都按预期工作,如果我在渲染列表视图之前调用它,然后滚动浏览它们自己排序的项目。

1 个答案:

答案 0 :(得分:0)

有一个静态方法CommandManager.InvalidateRequerySuggested强制重新评估命令的可执行性(是一个单词吗?)每当你想确保你的UI更新反映CanExecute结果的变化时,尝试调用它你的命令。