2011-07-30 6 views
1

나는 IDdataErrorInfo와 IValidationExceptionHandler를 구현 한 간단한 뷰와 뷰 모델을 가지고 있습니다. 보기에는 속성에 바인딩 된 SelectedValue가있는 컬렉션에 바인딩 된 ItemsSource가있는 콤보 상자가 포함되어 있습니다 - 데이터 오류 및 예외에 대한 유효성 검사. 속성에 대한 업데이트가 변경되고 업데이트 된 소스에 대해 알립니다.wpf idataerrorinfo combobox

나는 데이터 주석을 사용하고 있으며 속성은 Range 속성뿐만 아니라 Required 속성으로 꾸며져 있으며 뷰를 실행하면 콤보 박스에 오류 adorner와 내가 제공 한 메시지가 표시 될 것으로 예상됩니다. 필수 속성. 그러나 adorner를 가리키며 메시지 대신 "가치"가 "변환 될 수 없음"을 알았습니다.

속성에 대한 getter에서 선택한 값을 확인하고 값이 선택되어 있지 않으면 내 메시지와 함께 ValidationResult를 반환해야합니까? 나는 Required 속성을 사용하는 것이 트릭을했을 것이라고 생각했지만 콤보 박스에서는 작동하지 않는 것 같았습니까?

도움을 주시면 감사하겠습니다.

답변

2

이것은 일반적으로 콤보 박스에 SelectedValue가 나타내는 유형의 기본값을 나타내는 항목이 없으면 발생합니다.

바운드 선택한 값 속성이 string 인 것으로 가정하면 string.empty의 기본값을 나타내는 항목 (ItemsSource)이 있어야합니다.

때문에 (아마) 오류 값이 "는"만약이게 도움이 될지는 좀 알려주세요

을 변환 할 수 없습니다.

+0

답장을 보내 주셔서 감사합니다. ItemsSource는 개체에 id (long) 및 text (string)의 두 속성이있는 목록에 바인딩됩니다. id는 SelectedValuePath이고 DisplayMemberPath는 텍스트입니다. 네가 제안한대로하는 법을 알 수 있을지 모르겠다. – c95mbq

+0

예, SelectedValue 바인딩에 null 또는 string.empty가 있습니다. 너의 이드를 "길게?" (Nullable) 귀하의 목록에 {Id = null, Text = "- Please Select -"}와 같은 데이터가있는 객체가 있습니다. ID에 0 또는 null에 대한 유효성 검증 오류 만 리턴하는지 확인하십시오. 널 (null)을 0으로 감추는 다른 방어 코드를 제거하십시오. 확인 하셔서 알려주세요 ... –

+0

고마워요. 그게 효과가있는 것처럼 들리지만, db backing이 nullable이 아닌 필드 일 때 분명히 약간의 작업이 필요합니다. 나는 목록에 가짜 항목을 추가하는 것보다 덜 관입적 인 뭔가가 있기를 바랐다. 만일 당신이 길을 생각할 수 있다면 그것은 환상적 이겠지만, 지금은 당신의 대답을 받아 들일 것이다. 감사합니다 – c95mbq