CultureInfo о реализации IValueConverter - PullRequest
1 голос
/ 19 марта 2010

Когда ValueConverter используется как часть привязки, один из параметров функции Convert является объектом System.Globalization.CultureInfo.

Может кто-нибудь сказать мне, откуда этот культурный объект получает информацию?

У меня есть код, который форматирует дату на основе этой культуры. Когда я получаю доступ к своему элементу управления Silverlight, который размещен на моем компьютере, он корректно форматирует дату (используя формат d / MM / гггг , который установлен на моем компьютере как формат краткой даты). Когда я получаю доступ к тому же элементу управления, размещенному на другом сервере (с моего клиентского компьютера), дата форматируется как ММ / дд / гггг чч: мм: сс - что совершенно неверно. По случайному совпадению региональные настройки на сервере совпадают с настройками моего клиентского компьютера.

Это код моего конвертера значений:

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value is DateTime)
        {
            if (parameter != null && !string.IsNullOrEmpty(parameter.ToString()))
                return ((DateTime)value).ToString(parameter.ToString());
            else
                return ((DateTime)value).ToString(culture.DateTimeFormat.ShortDatePattern);
        }
        return value;
    }

в основном, в качестве параметра конвертера может быть указан определенный формат, но если это не так, то используется шаблон короткой даты объекта культуры.

Ответы [ 2 ]

1 голос
/ 19 марта 2010

Хм, это действительно интересно. Я не ожидаю, что сервер будет иметь какое-либо отношение к нему, так как Silverlight работает полностью на клиенте в обоих случаях. Но я бы запустил Fiddler и посмотрел, есть ли в заголовках HTTP что-нибудь, что указывает локаль или язык. Я не эксперт по HTTP / IIS, поэтому я не знаю, является ли это типичным или нет, но если сервер задает языковой стандарт, браузер может использовать его в качестве CurrentCulture по умолчанию.

Но, глядя на Reflector, ответ на ваш вопрос заключается в том, что он использует CultureInfo.CurrentUICulture, если только свойство Language целевого элемента не указано, в этом случае оно используется вместо этого. Вы также можете установить ConverterCulture для самой привязки, которая имеет самый высокий приоритет.

1 голос
/ 19 марта 2010
...