2010-12-08 23 views
2

J'ai un WPF4 DataGrid (celui qui est inclus avec WPF4) avec les colonnes 'Nom', 'Prénom' etc. Quand l'utilisateur clique sur un en-tête de colonne, par exemple « Nom », tout est trié dans l'ordre selon mes paramètres de culture, par exemple:Pré-tri d'un DataGrid dans WPF selon l'ordre de tri localisé

Anderson 
Rockford 
Ångström 

Je veux la colonne « Nom » à pré-triées, j'ai donc ajouté

<CollectionViewSource.SortDescriptions> 
     <scm:SortDescription PropertyName="SurName" /> 
    </CollectionViewSource.SortDescriptions> 

tout comme dans la réponse à la question Pre-sorting a DataGrid in WPF. Le problème est que WPF utilise maintenant un autre ordre de tri où « A » est triée comme « A » (je suppose que c'est un ordre de tri des États-Unis):

Andersson 
Ångström 
Rockford 

cliquant manuellement l'en-tête « Nom » re-trie les noms, cette fois en fonction de mes paramètres de culture. Comment puis-je dire à WPF d'utiliser le paramètre de culture en cours lors du pré-tri du DataGrid?

Répondre

1

Avez-vous essayé de définir la propriété Culture de CollectionViewSource? Quelque chose comme (drycoded) Edité par votre commentaire:

... in your namespaces 
xmlns:glob="clr-namespace:System.Globalization;assembly=mscorlib" 
.... 


<CollectionViewSource Culture="{x:Static glob:CultureInfo.CurrentCulture}"> 
    <CollectionViewSource.SortDescriptions> 
     <scm:SortDescription PropertyName="SurName" /> 
    </CollectionViewSource.SortDescriptions> 
</CollectionViewSource> 

Je ne sais pas pourquoi le CollectionViewSource ne pas utiliser la même culture par défaut, mais si ce n'est pas cela devrait être la propriété qu'il fixe pour toi.

Voir aussi cet article sur la façon dont semble contraignant d'utiliser la mauvaise culture lorsque la cible est une chaîne, peut-être il peut jeter un peu de lumière pour vous: http://www.nbdtech.com/Blog/archive/2009/02/22/wpf-data-binding-cheat-sheet-update-the-internationalization-fix.aspx

Ou cette question: WPF XAML Bindings and CurrentCulture Display

+0

'Culture = » {x: Static glob: CultureInfo.CurrentCulture} "' fonctionne (plutôt que '... CurrentUICulture' pour une raison quelconque), thx! Je ne sais pas vraiment pourquoi j'en ai besoin, puisque j'utilise aussi le correctif 'OverrideMetadata' comme décrit dans le lien de votre feuille de triche. – Batibix