2011-01-05 4 views
5

MVVM 프로젝트에서 두 개의 텍스트 상자 중 하나가 내 개체의 nullable 정수 필드에 바인딩되고 다른 하나는 문자열 필드에 바인딩됩니다. 문자열 속성에 바인딩 된 텍스트 상자에 값을 입력하면 뷰가로드되면 해당 값이 객체의 문자열 속성으로 업데이트된다는 것을 알 수 있습니다.Silverlight XAML에서 Databound nullable 값이 업데이트되지 않았습니다. XAML

그러나 내 개체의 nullable 정수 필드에 바인딩 된 텍스트 상자에 값을 입력 할 때 문제가 발생합니다. 적절한 정수 값이면 값이 업데이트됩니다. 내 개체의 nullable 정수 필드에 바인딩 된 텍스트 상자에 영숫자 문자열을 넣거나 그냥 비워두면 개체의 nullable 정수 필드가 업데이트되지 않습니다. 이전에 설정 한 내용은 그대로 유지됩니다.

예 : 숫자 입력란에 숫자 '7'을 입력하면 7로 업데이트됩니다. 이제 '7a'또는 'a7'또는 'asd'라고 말하기 위해 '7'에서 변경하거나 비워 두십시오. 값은 이전 값인 7로 유지됩니다.

Null 허용 유형을 변경하는 것 외에이 문제를 해결하려면 어떤 문제가 있습니까? 당신이 Nullable<Int32>에 바인딩하여 TextBoxempty string 또는 alphabet values를 입력 할 때마다 여기

답변

1

문제는 시간에 대한

덕분에 ..., 널 (NULL) INT의 값이 설정되어 있지 않습니다.

이 경우 문자열 값을 정수 값으로 변환하는 동안 바인딩이 실패합니다. 실패한 후에는 값을 null로 설정하지 않고 이전 값 그대로 유지합니다. 디버깅을 통해 이러한 일이 발생하고 있는지 확인할 수 있습니다.

해결 방법은 변환기를 만드는 것입니다. 이 변환기는 문자열 값을 int로 변환하려고 시도하고 실패 할 경우 nullable int 값으로 설정할 null을 반환합니다.

텍스트 = {바인딩 PROPERTYNAME, 모드 = 양방향, TargetNullValue = ''}

이 올바르게 바인딩 INT를 설정합니다 : 당신이 당신의 텍스트 상자가 마스크했다면

+0

감사합니다. 이미 변환기를 추가했습니다. 하지만 변환기의 문제는 null을 반환하여 텍스트 상자를 지울 수 있다는 것입니다. 사용자가 잘못된 값을 입력했는지 확인해야합니다. 텍스트 상자를 지우면 이익을 얻을 수 없습니다 ... 그리고 전체 숫자를 다시 입력해야합니다 (예 : 양식에 때때로 입력하는 16 자리 숫자와 같이) – user20358

6

숫자 만 값을 허용 당신은 또한 사용할 수 있습니다 ? 빈 문자열이 감지되면 null로 속성을 반환합니다.

관련 문제