Xaml Binding не в состоянии обнаружить пользовательскую культуру - PullRequest
1 голос
/ 28 июля 2011

Все статьи в Интернете предполагают, что для того, чтобы привязка XAML обнаружила выбранную культуру в операционной системе, необходимо использовать эту строку.

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

Проблема заключается в том, что региональные настройки в окнах позволяют пользователю настраивать форматирование дат и чисел любым способом, который он хочет. Например, допустим, что пользователю требуется 3 десятичных знака вместо 2. Он переходит к региональным настройкам и выполняет это обновление. Проблема в том, что это изменение не фиксируется в привязке Xaml

<TextBlock Text="{Binding Payments, StringFormat=C}" /> <!--display 2 digits-->

Как ни странно, в коде позади, если я использую ToString ("C"), я успешно получу любую настройку, которую я сделал на стороне сервера.

decimal sampleNumber = 1.123;
string s = sampleNumber.ToString("C"); //Puts 3 digits in the string variable

Мой обходной путь - использовать пользовательский конвертер, где я делаю ToString и возвращаю строку в привязку. Но странно, что я не видел этой проблемы (которая, скорее всего, является ошибкой в ​​WPF), размещенной где-либо в сети. Я что-то упустил?

1 Ответ

3 голосов
/ 28 июля 2011

Я не уверен, работает ли он для вас, но я помню, как однажды решил что-то подобное, но в отношении форматов даты. Я использовал атрибут ConverterCulture для привязок:

<TextBox Text="{Binding Path=Date, ConverterCulture={x:Static Globalization:CultureInfo.CurrentCulture}}"/>
...