2012-01-13 36 views
9

Tôi thường sử dụng TextBox để liên kết với Số nguyên mà không gặp nhiều vấn đề.Binding Double to TextBox

Tuy nhiên, nếu tôi cố gắng ràng buộc một TextBox thành Double thì nó không hoạt động.

Khi tôi nhập 5,85 (, là nền văn hóa của tôi decimalSeperator), tôi chuyển 585,0 đến giá trị kép.

Làm cách nào để chuyển đổi và tôi có thể sử dụng giải pháp nào để khắc phục sự cố này? ValueConverter có phải là giải pháp tốt nhất không?

+2

Điều này nghe có vẻ như đó không phải là dấu tách thập phân của bạn hoặc ứng dụng không quan tâm đến văn hóa. –

+0

Tôi đã được gỡ lỗi và đảm bảo 'NumberFormatInfo.CurrentInfo.NumberDecimalSeparator' là những gì tôi mặc dù nó được. Đó là tài sản đúng không? –

+1

Điều đó nghe có vẻ đúng ... –

Trả lời

4

Bạn có thể thử thêm này để xây dựng ứng dụng của bạn:

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

Tuy nhiên, xin lưu ý rằng điều này sẽ không hoạt động nếu bạn tùy chỉnh các dấu phân cách thập phân. (WPF double valued data binding with custom decimal separator)

+0

Tại sao không đơn giản đặt ngôn ngữ = XmlLanguage.GetLanguage (CultureInfo.CurrentCulture.IetfLanguageTag) trong hàm tạo cửa sổ chính? – Clemens

+1

Clemens, giải pháp của bạn cũng hoạt động nhưng bạn phải nhớ đặt riêng nó cho mỗi cửa sổ bạn tạo trong ứng dụng so với 'phương pháp contructor ứng dụng', nơi ngôn ngữ được đặt cho mọi khung công tác trong ứng dụng – friskm

+0

Bạn nói đúng. Làm cho cảm giác ghi đè giá trị mặc định của thuộc tính phụ thuộc được tích hợp trong trường hợp này. – Clemens

1

Đối với mục đích chẩn đoán, bạn có thể thêm hai dòng sau mã để bắt đầu chương trình của bạn ...

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

Và so sánh kết quả. Cơ hội khá tốt là văn hóa 'cuic' sẽ giữ 'en-US' bởi vì chuỗi giao diện người dùng thường được thực hiện theo cách đó. Bạn có thể thay đổi điều này bằng cách đặt thẻ <UICulture> trong hồ sơ dự án, hoặc bạn có thể thử như một chẩn đoán ...

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

và đánh giá tác dụng phụ. Nếu không, bạn có thể thực hiện một IValueConverter ...