2010-03-18 4 views
1

Lorsqu'un ValueConverter est utilisé dans le cadre d'une liaison, l'un des paramètres de la fonction Convert est un objet System.Globalization.CultureInfo.CultureInfo sur une implémentation de IValueConverter

Quelqu'un peut-il me dire d'où provient cet objet de culture?

J'ai du code qui met en forme une date basée sur cette culture. Lorsque j'accède à mon contrôle silverlight hébergé sur ma machine, il met en forme la date correctement (en utilisant le format d/MM/yyyy, qui est défini comme format de date courte sur ma machine). Lorsque j'accède au même contrôle hébergé sur un serveur différent (à partir de mon ordinateur client), la date est au format MM/jj/aaaa hh: mm: ss - ce qui est totalement faux. Par coïncidence, les paramètres régionaux sur le serveur sont définis sur le même que mon ordinateur client.

C'est le code pour mon convertisseur de valeur:

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

essentiellement, un format spécifique peut être spécifié comme paramètre de conversion, mais s'il est alors le modèle de date courte de l'objet de la culture est utilisée .

Répondre

1

Hm qui est en effet intéressant. Je ne m'attendrais pas à ce que le serveur ait quoi que ce soit à faire puisque Silverlight fonctionne entièrement sur le client dans les deux cas. Mais je voudrais exécuter Fiddler et voir s'il y a quelque chose dans les en-têtes HTTP qui spécifie une locale ou une langue. Je ne suis pas un expert sur HTTP/IIS, donc je ne sais pas si c'est typique ou non, mais si le serveur spécifie une locale, le navigateur peut utiliser cela comme CurrentCulture par défaut. Mais en regardant Reflector, la réponse à votre question est qu'il utilise CultureInfo.CurrentUICulture sauf si la propriété Language de l'élément cible est spécifiée dans quel cas est utilisé à la place. Vous pouvez également définir un ConverterCulture sur la liaison elle-même qui semble être la plus haute priorité.

+0

Merci, le problème est résolu, voir ma modification sur le post. Le serveur ne devrait avoir aucune influence sur la culture, d'où ma confusion (j'avais mis à jour le mauvais serveur ce matin). J'ai marqué le vôtre comme la réponse car elle est plus techniquement correcte selon la question :) – slugster

Questions connexes