CultureInfo о реализации IValueConverter

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

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

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

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

    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;
    }

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


person slugster    schedule 18.03.2010    source источник


Ответы (2)


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

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

person Josh    schedule 18.03.2010
comment
Спасибо, Джош, проблема решена, см. мою правку в посте. Сервер не должен иметь никакого влияния на культуру, отсюда и мое замешательство (сегодня утром я обновил не тот сервер). Я отметил ваш ответ как более технически правильный в соответствии с вопросом :) - person slugster; 19.03.2010

Вот краткая статья:

http://en.csharp-online.net/Localization_Like_the_Pros%E2%80%94CurrentCulture_and_CurrentUICulture

person Todd    schedule 18.03.2010
comment
Приветствую Тодда - см. мое редактирование к сообщению. Я поставил вам плюс за хорошую ссылку. - person slugster; 19.03.2010