IValueConverter использует неправильную культуру в Windows Phone 7 - PullRequest
7 голосов
/ 16 августа 2011

Я создал конвертер значений в своем Windows Phone 7 ...

public class MyConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        // ...
    }

    // ... 
}

... и используйте его вот так ...

<TextBlock Text="{Binding SomeField, Converter={StaticResource MyConverter}, ConverterParameter=SomeParameter}" <!-- ... --> />

Моя проблема: argument культура метода Convert всегда "en-US", даже когда я изменяю культуру устройства Windows Phone (или эмулятора), скажем, немецкой Германии, аргумент culture остается английским .

Ответы [ 3 ]

6 голосов
/ 16 августа 2011

Не ошибка, предполагаемое поведение. См. Этот пост в MSConnect Привязка WPF по умолчанию использует неверную CurrentCulture .

Решение состоит в том, чтобы установить для свойства Language вашего PhoneApplicationPage значение CurrentCulture, например:

Language = XmlLanguage.GetLanguage(
    Thread.CurrentThread.CurrentCulture.TwoLetterISOLanguageName);

Или можно указать культуру в XAML, используя атрибут Language, например:

<TextBlock Language="de-DE" Text="..." />

Или на PhoneApplicationPage само по себе

<phone:PhoneApplicationPage Language="de-DE" ...

Но гораздо лучшим решением будет не иметь преобразователя значений, который зависит от аргумента culture.

Редактировать: Я написал в блоге об альтернативном решении: Форматирование даты / времени в ValueConverter

1 голос
/ 17 августа 2011

У меня только что возникла эта проблема.

Я решил ее, используя следующее:

public object Convert(object value, Type targetType, object parameter,  System.Globalization.CultureInfo culture)
{   
    return string.Format(culture, "{0:N}, value);   
}

Используйте культура для преобразования контроля преобразования, но вы также должны убедиться, что вы оставилиЗначение параметра как объекта.Изменение его типа влияет на взаимодействие строки. Формат с ней.

1 голос
/ 16 августа 2011

Вы пытались найти CurrentCulture ?

Может быть ошибка в WP7, где это не передается.

...