wpf - binding string format date
Necesidad de formatear fechas en WPF DataGrid construido dinĂ¡micamente (8)
Estamos vinculando un conjunto de resultados desconocido a un DataGrid de WPF en tiempo de ejecución. Algunas de nuestras columnas contendrán valores de DateTime y necesitamos formatear adecuadamente estos campos de fecha y hora. Sin saber qué columnas van a ser los campos de DateTime en el momento del diseño, ¿cómo podemos formatear las columnas en tiempo de ejecución?
Estamos usando DefaultView de DataTable para enlazar con el DataGrid de WPF.
Descubrí cómo hacer esto en código ... espero que haya una manera de imitar esto en XAML. (Por favor, publique si encuentra una muestra de XAML que funcione.)
Para lograr esto en el código, agregue un controlador de eventos para el evento Grid''s AutoGeneratingColumn, como:
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}";
}
}
}
Hey, puede establecer la información de la cultura local en el constructor del formulario WPF como
this.Language = XmlLanguage.GetLanguage (CultureInfo.CurrentCulture.IetfLanguageTag);
O puede incluir el marcado xml xml: lang = "en-GB" en el marcado del encabezado de la ventana
La respuesta de FarrEver, el 11 de mayo es buena, pero para mí no funciona. Todavía obtengo American mm / dd / aaaa en lugar de mi alemán dd / mm / aaaa. Así que propongo encontrar la configuración regional de la computadora y usarla en 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
ver también: mi blog
Yo usaría un DataTemplate con un DataType de Date o DateTime (dependiendo de cuál saldrá como). Coloque un TextBlock en el DataTemplate con un StringFormat en el enlace.
Algo como esto debería funcionar (no probado)
<DataTemplate DataType="{x:Type DateTime}">
<TextBlock Text="{Binding StringFormat={0:d}}" />
</DataTemplate>
O si quieres que se aplique solo en el Grid.
<wpfToolkit:DataGrid>
<wpfToolkit:DataGrid.Resources>
<DataTemplate DataType="{x:Type DateTime}">
<TextBlock Text="{Binding StringFormat={0:d}}" />
</DataTemplate>
</wpfToolkit:DataGrid.Resources>
...
</wpfToolkit:DataGrid>
corro de esta manera Su trabajo completo.
<TextBlock Text="{Binding Date_start, StringFormat=/{0:dd-MM-yyyy/}, Mode=OneWay}" />
qué pasa
<wpfToolkit:DataGridTextColumn Header="Fecha Entrada" Width="110"
Binding="{Binding EnterDate,StringFormat={}/{0:dd/MM/yyyy hh:mm/}}" IsReadOnly="True" />
Creo que es mejor que escribir piezas de código más grandes.
dataGridTextColumn.Binding.StringFormat = "{0: dd / MM / aaaa}";
trabajó bellamente
<DataGridTextColumn Header="Last update"
Width="110"
IsReadOnly="True"
Binding="{Binding Path=Contact.TimeUpdate, StringFormat={}/{0:dd/MM/yyyy hh:mm/}, Mode=OneWay}" />