2010-09-02 8 views
14

W WPF Próbuję powiązać właściwość Date z datagridem, a jeśli mam tylko datę Wiązanie właściwości jako format DateTime mogę posortować ją w datagrid.DateTime Nie wyświetla się w formacie currentculture w Datagrid, ListView

I tutaj muszę pokazać regionalną datę, jeśli użytkownik zmieni ustawienia regionu i języka, aplikacja powinna pokazać format czasu resepective.

Oto pojawia się problem, gdy data jest w formacie łańcuchowym, działa zgodnie z ustawieniami regionu, ale gdy właściwość jest powiązana w formacie DateTime, data jest przekierowana do formatu amerykańskiego, a nie pokazywana z prawidłowymi ustawieniami regionu.

Więc jeśli mam format string sortowaniu pracą kolumna nie robi, a jeśli jej w formacie DateTime, to jednak przekształcić w ustawieniach regionalnych

Odpowiedz

26

To dlatego, że system wiązania wykorzystuje kulturę określoną przez właściwość FrameworkElement.Language, która nie dopasowuje się automatycznie do obecnej kultury (co jest nieco głupawym IMO, ale tak to już jest ...).

szczęście istnieje prosty sposób wokół niego, wystarczy zastąpić metadanych dla właściwości Language w aplikacji statycznym konstruktorze as shown here:

public partial class App : Application 
{ 
    static App() 
    { 
     FrameworkElement.LanguageProperty.OverrideMetadata(
      typeof(FrameworkElement), 
      new FrameworkPropertyMetadata(
       XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag))); 
    } 
} 
+3

Wielkie dzięki Thomas, Dokładnie takie rozwiązanie oczekiwałem. Ale to nie jest błąd w .NET Framework. – crazy9

+0

To pomaga, ale robi nam to tylko część drogi. WPF oblicza teraz, kiedy używam innej kultury, jak en-GB, ale wciąż nie odbiera zmian w formatach regionalnych (np. Zmieniłem en-US na moim komputerze, aby używać yyyy-MM-dd, ale siatki nadal używać MM/dd/rrrr). –

+0

Wyświetla format poprawnie w mojej aplikacji WPF teraz, tj. Od MM/dd/rrrr do dd/MM/rrrr, ale to upuszcza część AM/PM mojego czasu, której potrzebuję. Będę kontynuował badania. – Thierry