2012-01-13 12 views
9

多くの場合、TextBoxを使用してIntegersにバインドしても問題はありません。Doubleを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

Clemens、あなたのソリューションも機能しますが、アプリケーションで作成する各ウィンドウごとに別々に置くことを忘れないでください。アプリケーション内のすべてのフレームウォーキングの言語が設定されている 'アプリケーションコンストラクタメソッド'と比較して – friskm

+0

そうです。この場合、組み込みの依存関係プロパティのデフォルト値をオーバーライドするのが理にかなっています。 – Clemens

1

は、診断目的のために、あなたは...あなたのプログラムの開始に

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

を次の2行のコードを追加し、結果を比較することができます。 UIスレッドが一般的にそのように行われるので、 'cu-k'文化は 'en-US'を保持する可能性が非常に高いです。あなたは、プロジェクトファイルに<UICulture>タグを設定することで、これを変更したり、診断...

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

としてを試してみて、副作用を評価することができます。それ以外の場合は、IValueConverterを実装することができます...

関連する問題