2010-04-27 2 views
0

너무 오래과 상반 돌출 정말 일관성있는 질문을 나던에서 INotifyPropertyChanged?MVVM - - prismv2이 이후

2 : 누구든지 delegatecommand.RaiseCanExecuteChanged 문제를 해결할 수있는 방법을 찾았습니까? 아니면 MS가 해결할 때까지 직접 수정해야합니까?

나머지 이야기는 계속 진행하십시오.

내 viewmodel에서 EF POCO 개체 인 Model.Doctor에 연결된 의사 개체 속성이 있습니다. 나는 같은 세터에서 ("의사") OnPropertyChanged를 한 :

 Private Property Doctor() As Model.Doctor 
      Get 
       Return _objDoctor 
      End Get 
      Set(ByVal Value As Model.Doctor) 
       _objDoctor = Value 
       OnPropertyChanged("Doctor") 
      End Set 
     End Property 

유일한 시간은 화재의 경우 전체 개체 변경을 OnPropertyChanged를. 이것은 의사의 속성이 언제 변경되는지 알 필요가 있다는 것을 제외하고는 문제가되지 않으므로 양식 (예 : 버튼 저장)에서 다른 컨트롤을 활성화 할 수 있습니다.

Public Property FirstName() As String 
     Get 
      Return _objDoctor.FirstName 
     End Get 
     Set(ByVal Value As String) 
      _objDoctor.FirstName = Value 
      OnPropertyChanged("Doctor") 
     End Set 
    End Property 

이는 칼 Shifflet에서 XAMLPowerToys 컨트롤에서 가져온 것입니다, 그래서 내가 올바른 가정해야한다 :이 방법으로 그것을 구현하기 위해 노력했다. 그러나 저의 삶을 위해서 나는 그것을 작동시킬 수 없습니다.

내보기를 인스턴스화하기 위해 단일 컨테이너를 사용하고 있기 때문에 여기에 PRISM을 포함 시켰습니다. 닥터에게 새 값을 채우는 eventaggregator를 통해 viewmodel에 대한 변경 알림을 받고 있습니다. 이 모든 일을하는 이유는 PRISM의 DelegateCommand 때문입니다. 어쩌면 이것이 내 진짜 문제 일 것입니다.

DelegateCommand에 RaiseCanExecuteChanged 메서드를 구현하는 명령을 실행하지 않기 때문에 수동으로 해지해야하는 버그가있는 것으로 보입니다. 내 onPropertyChangedEventHandler에 대한 코드가 있습니다. 물론 이것은 ICommand 인터페이스를 통해 구현되지 않기 때문에 각 속성의 RaiseCanExecuteChanged에 액세스 할 수 있도록 DelegateCommand (X)의 속성을 해체하고 만들어야합니다.

답변

1

2 : 사람이 가 문제를 delegatecommand.RaiseCanExecuteChanged 해결하는 방법을 발견 했습니까? 또는 MS가 수행 할 때까지 직접 수정해야합니까? ?

DelegateCommand 대신 Josh Smith의 RelayCommand을 사용하십시오. CanExecute 명령이 발생하지 않는 문제를 해결하고 DelegateCommand와 같은 메모리를 누설하지 않습니다.

"이벤트 구독을 CommandManager.RequerySuggested 이벤트에 위임합니다. 이렇게하면 WPF 명령 인프라가 모든 RelayCommand 개체 기본 명령을 묻는 경우마다 실행할 수 있습니다. "

+0

네 참조, 그 경로를 이동하기로 결정했다. 나는 MEF를 위해 프리즘을 모두 덤프 할 수도 있습니다 ... hehe thanks – ecathell

0

약 2 : Microsoft에서 수정해야 할 버그가 없습니다. 의도적으로 명령 자체에 대한 재평가를 지시해야하기 때문입니다. 물론 당신은 그들의 결정에 동의하지 않을 수 있습니다. 당신이 DelegateCommands를 원한다면

는 재평가 RaiseCanExecuteChanged이 발사 될 때마다, http://compositewpf.codeplex.com/Thread/View.aspx?ThreadId=47338