2010-03-18 5 views
1

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

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

У меня есть код, который форматирует дату, основанную на этой культуре. Когда я получаю доступ к элементу управления 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; 
    } 

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

ответ

1

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

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

+0

Спасибо, Джош, проблема решена, см. Мое редактирование в сообщении. Сервер не должен влиять на культуру, поэтому моя путаница (сегодня утром я обновил неверный сервер). Я отметил ваш ответ, поскольку он более технически корректен в соответствии с вопросом :) – slugster

Смежные вопросы