2010-03-18 65 views
1

當使用ValueConverter作爲綁定的一部分時,Convert函數的參數之一是System.Globalization.CultureInfo對象。IValueConverter實現中的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; 
    } 

基本上,特定格式可被指定爲轉換器參數,但如果不是,則使用培養對象的短日期模式。

回答

1

嗯這很有趣確實如此。我不希望服務器與它有任何關係,因爲在這兩種情況下,Silverlight都完全在客戶端上運行。但是我會運行Fiddler並查看HTTP頭中是否有指定語言環境或語言的內容。我不是HTTP/IIS的專家,因此我不知道這是否是典型的,但是如果服務器指定區域設置,瀏覽器可能會將其用作默認CurrentCulture。

但是看着反射器,你的問題的答案是它使用CultureInfo.CurrentUICulture,除非指定目標元素的Language屬性,而不是在這種情況下使用。您也可以在綁定本身上設置一個ConverterCulture,這看起來是最高優先級的。

+0

感謝喬希,問題已解決,請參閱我的帖子上的編輯。服務器不應該對文化產生任何影響,因此我的困惑(我今天早上更新了錯誤的服務器)。我已經標記你的答案,因爲根據問題,它在技術上更加正確:) – slugster 2010-03-18 22:21:29