実行時に不明な結果セットをWPF DataGridにバインドしています。一部の列にはDateTime値が含まれるため、これらの日時フィールドを適切にフォーマットする必要があります。設計時にどの列がDateTimeフィールドになるかがわからない場合、実行時に列をどのようにフォーマットできますか?
DataTableのDefaultViewを使用して、WPF DataGridにバインドしています。
どうですか
<wpfToolkit:DataGridTextColumn Header="Fecha Entrada" Width="110"
Binding="{Binding EnterDate,StringFormat={}\{0:dd/MM/yyyy hh:mm\}}" IsReadOnly="True" />
大きなコードを書くよりも良いと思います
コードでこれを行う方法を理解しました...うまくいけば、XAMLでこれを模倣する方法があります。 (動作するXAMLサンプルを見つけたら投稿してください。)
これをコードで実現するには、グリッドのAutoGeneratingColumnイベントのイベントハンドラーを追加します。
private void ResultsDataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
if (e.PropertyType == typeof(DateTime))
{
DataGridTextColumn dataGridTextColumn = e.Column as DataGridTextColumn;
if (dataGridTextColumn != null)
{
dataGridTextColumn.Binding.StringFormat = "{0:d}";
}
}
}
WPFフォームのコンストラクターでロケールカルチャ情報を次のように設定できます。
this.Language = XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag);
Or xmlマークアップを含めることができますxml:lang = "en-GB"ウィンドウヘッダーマークアップに含めることができます
<DataGridTextColumn Header="Last update"
Width="110"
IsReadOnly="True"
Binding="{Binding Path=Contact.TimeUpdate, StringFormat={}\{0:dd/MM/yyyy hh:mm\}, Mode=OneWay}" />
私は、DataTypeがDateまたはDateTimeのDataTemplateを使用します(どちらに到達するかによって異なります)。バインディングでStringFormatを使用して、TextBlockをDataTemplateに配置します。
このようなものは動作するはずです(テストされていません)
<DataTemplate DataType="{x:Type DateTime}">
<TextBlock Text="{Binding StringFormat={0:d}}" />
</DataTemplate>
または、グリッドでのみ適用したい場合
<wpfToolkit:DataGrid>
<wpfToolkit:DataGrid.Resources>
<DataTemplate DataType="{x:Type DateTime}">
<TextBlock Text="{Binding StringFormat={0:d}}" />
</DataTemplate>
</wpfToolkit:DataGrid.Resources>
...
</wpfToolkit:DataGrid>
dataGridTextColumn.Binding.StringFormat = "{0:dd/MM/yyyy}";
美しく働いた
私はこのように実行します。その仕事は完了しました。
<TextBlock Text="{Binding Date_start, StringFormat=\{0:dd-MM-yyyy\}, Mode=OneWay}" />
5月11日のFarrEverの答えは良いですが、私には機能しません。私はまだドイツ語のdd/mm/yyyyの代わりにアメリカのmm/dd/yyyを取得します。コンピューターの地域設定を見つけてStringFormatで使用することを提案します
Private Sub DGrid_AutoGeneratingColumn(ByVal sender As System.Object, ByVal e As Microsoft.Windows.Controls.DataGridAutoGeneratingColumnEventArgs)
If e.PropertyType Is GetType(DateTime) Then
Dim dataGridTextColumn As DataGridTextColumn = TryCast(e.Column, DataGridTextColumn)
If dataGridTextColumn IsNot Nothing Then
Dim ShortDatePattern As String = System.Globalization.DateTimeFormatInfo.CurrentInfo.ShortDatePattern
dataGridTextColumn.Binding.StringFormat = "{0:" + ShortDatePattern + "}" '"{0:dd/MM/yyyy}"
End If
End If
End Sub
参照: 私のブログ