2011-03-07 1 views
0

간단한 시나리오가 있으며 그 문제는 지난 몇 일간 해결되지 않는 것 같습니다.WPF : MVVM - ivalueconverter에서 명령 연결 단추 사용 안 함

좋아, 먼저 MVVM을 사용하여 ViewModel에서 내 View를 바인딩합니다. ViewModel의 여러 속성 (대부분의 문자열)에 여러 텍스트 상자 마녀가 바인딩되어 있습니다 (문자열 속성으로 개체 (유형 Person, 이름 SelectedPerson)에 실제로 바인딩, 개체 마녀는 viewmodel의 속성 임). 이 개체는 INotifyPropertyChanged 및 IDataErrorInfo를 구현합니다. 또한 Age라는 int 속성이 있습니다. 또한 내보기에서 버튼 마녀가 내 ViewModel의 명령에 바인딩되어 있습니다. CanExecute 내부의 명령 마녀가 SelectedPerson의 속성을 테스트하고 모두 올바른 경우 true를 반환합니다.

내 문제는 다음과 같습니다. 내보기에서 내년도 텍스트 상자에 int가 아닌 값을 입력하면 빨간색 tectagle이 나타납니다 (변환 예외이므로 예외는 아니지만). 개체 뒤에 (SelectedPerson, 유형 Person) newValue (그 속성 나이 세터, 또는 IDataErrorInfo 멤버를 가로 채지 않는다 .... 보내지 않습니다 .... 내가 있기 때문에 어떤 "새로운"값을 isnt 왜냐하면 내가 정상적인 것 같아요. 첫 번째 장소에서 텍스트 상자의 잘못된 형식).

새로운 나이 (잘못된 잘못된 나이)가 설정되지 않은 경우 개체가 마지막 값을 유지하고 마녀가 올바른 경우 마녀, 올바른 경우 명령이 올바른 것입니다 (canexecute true를 반환)하고 버튼은 내가 현재 속성을 축복하는 변환 방법을 전달 해달라고 할 때 비활성화 (이 버튼 마녀의 데이터 저장 모듈에 현재 사용자 정보를 저장) 버튼을 제출하고자 상상할 수 있듯이

을 사용할 수 있습니다 것입니다.

추신 : 나는 IValueConverter 클래스를 사용하고 Age에 바인드 된 해당 텍스트 상자에서 StringToIntConverter 클래스를 사용했습니다 .... 그러나 Convert 메서드에서 SelectedPerson 바인드 된 객체를 전달하는 방법을 모릅니다. 텍스트 값을 반환하고 int 값을 반환)

나는 그것을 할 수있는 방법 중 하나는 MultiBinding 시나리오를 사용하는 것 같아요.

변환기에서 Convert 메서드로 SelectedPerson을 전달할 수 있다면 변환기 자체에서 해당 명령을 무효화 할 수 있습니다.

Sory for my english, 나는 그것이 완벽하지는 않다는 것을 안다. 그리고 미리 시간을내어 감사한다.

답변

1

나는 텍스트 속성을 문자열 속성에 대신 바인딩하고보기 모델을 업데이트하여 해당 속성 이름에 대한 IDataErrorInfo 구현이 문자열을 int 변환으로 시도하고 그 결과를 반환한다고 생각합니다. 또한 CanExecute 테스트는이 변환을 유효성 검사 테스트의 일부로 포함합니다.