2010-01-25 2 views
0

뷰 모델 모음에 바인딩 된 ListView가 있습니다. Item 템플릿에는 뷰 모델의 명령에 바인딩 된 단추가 포함되어 있습니다. ListView의 ItemsSource가 각 viewmodel에 대해 RaiseCanExecuteChanged를 호출하는 속성을 설정할 때. 나는 사실이 회색으로 버튼을 보여줍니다 모든 뷰 모델에 CanExecute에 대해 반환되는 것을 확인했다는 사실에도 불구하고RaiseCanExecuteChanged가 호출 된 후 ListView가 업데이트되지 않습니다.

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

. 내가 주목 한 유일한 점은 목록보기가 이미 렌더링 된 경우 RaiseCanExecuteChanged를 호출하면 모든 것이 예상대로 작동하고 listview가 렌더링되고 항목을 스크롤하기 전에 호출하면 호출된다는 것입니다.

답변

0

정적 실행 방법 CommandManager.InvalidateRequerySuggested을 사용하면 명령 실행 가능성을 재평가 할 수 있습니다. 즉, 명령의 CanExecute 결과가 반영되도록 UI를 업데이트하려고 할 때마다 명령 실행 파일을 다시 호출해야합니다.

+0

CommandManager.InvalidateRequerySuggested()를 호출하는 명령을 만들었습니다. CanExecute를 전혀 호출하지 않는 것으로 보입니까? RaiseCanExecuteChangedEvents()의 Microsoft.Practices.Composite.Presentation.Commands – Russ

+1

에서 DelegateCommand 입니다. Thread.Sleep (1000) 행을 추가했습니다. 이것은 문제를 해결하는 것으로 보인다. 컨트롤이 화면에 렌더링 된 후에 RaiseCanExecuteChangedEvents()를 호출해야하는 것으로 생각됩니다. 분명히 이것은 문제를 해결하기위한 수용 가능한 방법이 아닙니다. – Russ

관련 문제