【问题标题】:How to show Persian date in WPF DataGrid?如何在 WPF DataGrid 中显示波斯日期?
【发布时间】:2015-08-03 05:53:34
【问题描述】:

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

<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>

以波斯格式显示日期? 数据库中的时间是时间戳格式。我只想以波斯格式“显示”它,如果可能的话,有一个波斯日历。

【问题讨论】:

    标签: c# wpf datagrid persian


    【解决方案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,另一个不错的来源是来自 Code Project 的 this link

    【讨论】:

      【解决方案2】:

      这个解决方案对我有用:

      <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>
      

      注意:这适用于 windows 10,对于 Windows,我没有测试但不适用于 windows 7 或更低版本,因为这些 Windows 不支持波斯日历,但 10 支持它.

      【讨论】:

        【解决方案3】:

        对我来说,改变环境来改变 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>
        

        【讨论】:

          猜你喜欢
          • 2020-05-23
          • 1970-01-01
          • 2016-03-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-08-13
          • 2016-06-04
          相关资源
          最近更新 更多