2012-01-13 5 views
9

자주 TextBox를 사용하여 많은 문제없이 Integers에 바인딩했습니다.TextBox에 두 번 바인딩

그러나 TextBox를 Double에 바인딩하려고하면 작동하지 않습니다.

5,85 (필자의 문화권 인 decimalSeperator)를 입력하면 585.0을 double 값으로 전달합니다.

어떻게 변환되며이 문제를 해결하기 위해 어떤 해결책을 사용할 수 있습니까? ValueConverter가 최고의 솔루션일까요?

+2

이것은 소수 구분 기호가 아니거나 응용 프로그램이 문화에 대해 신경 쓰지 않는 것처럼 들립니다. –

+0

디버깅을하고'NumberFormatInfo.CurrentInfo.NumberDecimalSeparator'가 무엇인지 알았습니다. 그게 바로 재산이지? –

+1

그게 옳은 소리. –

답변

4

당신은 응용 프로그램의 생성자이 추가 시도 할 수 :

FrameworkElement.LanguageProperty.OverrideMetadata(typeof(FrameworkElement), 
      new FrameworkPropertyMetadata(XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag))); 

그러나, 당신은 소수 구분 기호를 사용자 정의 할 경우이 작동하지 않습니다 유의하시기 바랍니다. ( WPF double valued data binding with custom decimal separator)

+0

메인 윈도우 생성자에서 단순히 Language = XmlLanguage.GetLanguage (CultureInfo.CurrentCulture.IetfLanguageTag)를 설정하지 않으시겠습니까? – Clemens

+1

클레멘스, 귀하의 솔루션도 작동하지만 응용 프로그램에서 모든 프레임 워크 요소에 대해 언어가 설정된 '응용 프로그램 생성자 방법'과 비교하여 응용 프로그램에서 생성 한 각 창마다 별도로 넣어야합니다. – friskm

+0

맞습니다. 이 경우 기본 제공 종속성 속성의 기본값을 무시하는 것이 좋습니다. – Clemens

1

진단 목적을 위해, 당신은 ... 프로그램의 시작

var cc = Thread.CurrentThread.CurrentCulture; 
    var cuic = Thread.CurrentThread.CurrentUICulture; 

을 코드의 두 줄을 추가하고 결과를 비교할 수 있습니다. UI 스레드가 일반적으로 그런 방식으로 수행되기 때문에 'cu-k'문화가 'en-US'를 유지할 가능성이 상당히 높습니다. 당신은 프로젝트 파일에 <UICulture> 태그를 설정하여이를 변경하거나 진단으로을 시도 할 수 있습니다 ...

Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture; 

및 부작용을 평가한다. 그렇지 않으면 IValueConverter를 구현할 수 있습니다 ...