如何更改此代码(或其他地方):
<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;用波斯语格式,如果可能的话有波斯语日历。
答案 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>