2010-01-02 3 views
1

В WPF приложения У меня есть ListView:DateTime область конкретных форматирования в WPF ListView

<ListView Height="100" Width="434" Margin="0,2,0,0" x:Name="lvItems" ItemsSource="{Binding ElementName=MainWindow, Path=ShowQuCollection}" > 
    <ListView.View> 
    <GridView> 
    <GridViewColumn Header="Date" Width="100" DisplayMemberBinding="{Binding Date}"/> 
    <GridViewColumn Header="Time" Width="100" DisplayMemberBinding="{Binding Time}"/> 
    <GridViewColumn Header="Description" Width="200" DisplayMemberBinding="{Binding Description}"/> 
    </GridView> 
    </ListView.View> 
</ListView> 

, которая связана с ObservableCollection через DataBinding. ObservableCollection заполняется из таблицы SQL SQL Server с использованием LINQ to SQL.

ObservableCollection<ShowsQu> _ShowQuCollection = 
     new ObservableCollection<ShowsQu>(); 

public ObservableCollection<ShowsQu> ShowQuCollection 
{ get { return _ShowQuCollection; } } 

public class ShowsQu 
{ 
    public string ShowCode { get; set; } 
    public DateTime Date { get; set; } 
    public TimeSpan Time { get; set; } 
    public string Description { get; set; } 
} 

private void VisualizeAllShows() 
{ 

    MyfirstdbDataContext context = new MyfirstdbDataContext(); 
    _ShowQuCollection.Clear(); 

    var sh = from p in context.Shows select p; 

    foreach (var p in sh) 
     _ShowCollection.Add(new ShowsQu 
     { 
      Date = p.Date, 
      Time = p.Time, 
      Description = p.Description 
     });     
} 

Проблема заключается в том, что ListView отображает поле даты из таблицы базы данных SQLServer, как это - без применения региона определенного форматирования (я предположил, что это должно быть применено по умолчанию).

Где и что мне нужно сделать, чтобы отформатировать его в соответствии с настройками регионов ПК?

ответ

6

По какой-то причине WPF автоматически не выбирает текущую культуру, вы должны установить ее самостоятельно. Легкий способ сделать это - добавить следующий код в ваше приложение. Запускное событие:

using System.Windows; 
using System.Windows.Markup; 
using System.Globalization; 

... 

void App_Startup(object sender, StartupEventArgs e) 
{ 

    FrameworkElement.LanguageProperty.OverrideMetadata( 
     typeof(FrameworkElement), 
     new FrameworkPropertyMetadata(XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag))); 
} 
+0

Это работает как чудо, спасибо! – rem

1

Из MSDN:

You can pass a CultureInfo object representing the culture whose formatting is to be used to a method that has an IFormatProvider parameter. The following example displays a date using the short date format of the pt-BR culture. 

Отсюда: http://msdn.microsoft.com/en-us/library/az4se3k1.aspx

Некоторой подробнее здесь: http://msdn.microsoft.com/en-us/library/5hh873ya.aspx

Надеется, что это помогает.

+0

Tony, спасибо за ссылки! – rem

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