如何在WPF DataGrid中显示波斯日期?

时间:2015-08-03 05:53:34

标签: c# wpf datagrid persian

如何更改此代码(或其他地方):

<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格式。我只想&#34;展示它&#34;用波斯语格式,如果可能的话有波斯语日历。

3 个答案:

答案 0 :(得分: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>

如果您需要波斯语格式和语言的波斯日历,您可能需要查看this library,另一个好的来源是代码项目中的this link

答案 1 :(得分:1)

此解决方案对我有用:

<DataGrid AutoGenerateColumns="False" IsReadOnly="True">
    <DataGrid.Columns>
          <DataGridTemplateColumn Width="*" Header="سررسید">
              <DataGridTemplateColumn.CellTemplate>
                 <DataTemplate>
                    <TextBlock Text="{Binding DueDate,StringFormat=d}" Language="fa-IR"/>
              </DataTemplate>
          </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>

答案 2 :(得分:0)

至于我,更改环境以更改DatePicker格式(如Thread.CurrentCulture)并不是一个好主意。当然,您可以创建从DatePicker派生的Control并实现像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>