2015-08-03 3 views
3

Как я могу изменить этот код (или где-то еще):Как показать персидскую дату в WPF DataGrid?

<DataGridTemplateColumn x:Name="timeColumn" Header="time" IsReadOnly="True"> 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <DatePicker SelectedDate="{Binding time, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}"/> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn> 

Чтобы показать дату в персидской формате? Время в базе данных находится в формате Timestamp. Я хочу просто «показать это» в персидском формате и, если возможно, иметь персидский календарь.

ответ

0

Что касается меня, изменение среды для изменения формата DatePicker (например, Thread.CurrentCulture) не является хорошей идеей. Конечно, вы можете создать Control, полученный из DatePicker, и реализовать свойство зависимостей, например Format, но это требует слишком больших усилий. Простое и элегантное решение, которое я нашел, является обязательным значением не для самого SelectedDate, а для некоторого неиспользуемого свойства (для этого я использовал свойство ToolTip) и обновил это свойство, когда SelectedDate был изменен. осуществление # C для односторонними связующими выглядит следующим образом:

DatePicker datePicker = new DatePicker(); 
    datePicker.SetBinding(ToolTipProperty, "Date"); 
    datePicker.SelectedDateChanged += (s, ea) => 
     { 
      DateTime? date = datePicker.SelectedDate; 
      string value = date != null ? date.Value.ToString("yyyy-MM-dd") : null; 
      datePicker.ToolTip = value; 
     }; 

XAML + C# должен выглядеть следующим образом:

XAML:

<DatePicker ToolTip="{Binding Date Mode=TwoWay}" 
      SelectedDateChanged="DatePicker_SelectedDateChanged"/> 

C#:

private void DatePicker_SelectedDateChanged(object sender, EventArgs ea) 
{ 
    DatePicker datePicker = (DatePicker)sender; 
    DateTime? date = datePicker.SelectedDate; 
    string value = date != null ? date.Value.ToString("yyyy-MM-dd") : null; 
    datePicker.ToolTip = value; 
} 

Для двусторонней реализации обработать событие ToolTipChanged таким же образом, чтобы обновить SelectedDate.

 </Setter> 
    </Style> 
</DatePicker.Resources> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 
1

Если вы хотите, чтобы показать PersianDateTime вы можете использовать System.Globalization.PersianCalendar на ваш взгляд-модели, как это:

public string PersianDate 
    { 
     get 
     { 
      PersianCalendar pc = new PersianCalendar(); 
      DateTime thisDate = convert your Timestamp to DateTime here ...; 
      return string.Format("{0}, {1}/{2}/{3} {4}:{5}:{6}", 
          pc.GetDayOfWeek(thisDate), 
          pc.GetMonth(thisDate), 
          pc.GetDayOfMonth(thisDate), 
          pc.GetYear(thisDate), 
          pc.GetHour(thisDate), 
          pc.GetMinute(thisDate), 
          pc.GetSecond(thisDate)); 
     } 
    } 

, а затем в вашем Xaml:

<DataGrid ItemsSource="{Binding YourList}" AutoGenerateColumns="False"> 
     <DataGrid.Columns> 
      <DataGridTextColumn Header="PersianTime" Binding="{Binding PersianDate}"/> 
      < Other columns ... /> 
     </DataGrid.Columns> 
    </DataGrid> 

Если вам нужен Персидский календарь в формате Farsi формат и язык, вы можете проверить this library, еще один хороший источник - this link из проекта кода.

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

  • Нет связанных вопросов^_^