Cómo formatear TimeSpan en XAML

Estoy tratando de formatear un bloque de texto que está vinculado a una propiedad TimeSpan . Funciona si la propiedad es de tipo DateTime pero falla si se trata de un TimeSpan . Puedo hacerlo usando un convertidor. Pero estoy tratando de averiguar si hay alguna alternativa.

Código de muestra:

 public TimeSpan MyTime { get; set; } public Window2() { InitializeComponent(); MyTime = DateTime.Now.TimeOfDay; DataContext = this; } 

Xaml

  

Estoy esperando que el bloque de texto muestre solo horas y minutos. Pero se muestra como:

19: 10: 46.8048860

En .NET 3.5 podría usar un MultiBinding en su lugar

         

Actualizar
Para responder los comentarios.

Para asegurarse de que muestre 2 dígitos, incluso si las horas o los minutos son 0-9, puede usar {0:00} en lugar de {0}. Esto asegurará que la salida para el tiempo 12:01 sea 12:01 en lugar de 12: 1.
Si quieres generar 01:01 como 1:01 usa StringFormat="{}{0}:{1:00}"

Y el formato condicional se puede usar para eliminar el signo negativo por minutos. En lugar de {1:00} podemos usar {1: 00; 00}

         

La cadena de formato está diseñada para funcionar en un DateTime , no en un TimeSpan .

Puede cambiar su código para trabajar con DateTime.Now lugar. Tu xaml está bien:

  

Actualizar

Y a partir de .NET 4 formatee un TimeSpan siguiente manera:

  

Solo para agregar al grupo, estoy usando con éxito este enlace para mostrar un TimeSpan en una aplicación WPF de producción:

 Binding="{Binding Time, Mode=TwoWay, StringFormat=\{0:h\\:mm\}}" 

Hizo algunos bashs para obtener las barras diagonales a la derecha 🙂

StringFormat debe tener la forma de una cadena de formato. En este caso, se vería así:

  

Nota: si desea mostrar el número total de horas y minutos y el intervalo de tiempo es superior a 24 horas, hay una advertencia con su enfoque: Aquí hay una solución .

Para enlaces múltiples, necesita prestar atención desde .NET 4.

Una breve descripción a continuación, probada con .NET 4.6:

Encuadernación regular:

  

Enlace múltiple:

       

o puede usar “en lugar de en la multiburación:

  

Nota: el uso de StringFormat = “{} {0: hh \: \: mm \: ss} -> {1: hh \: mm \: ss}” no funcionará en un enlace múltiple, esto dará como resultado un resultado en blanco.

WPF en .NET 4 ahora tiene un intervalo de tiempo de cadenas http://msdn.microsoft.com/en-us/library/ee372286.aspx

Estoy usando lo siguiente

Soy consciente de que esta pregunta es antigua ahora, pero me sorprende que nadie sugiriera este simple StringFormat que funcionará en un TimeSpan directamente:

  

Si desea utilizar StringFormat en una etiqueta que usa la propiedad de contenido, puede usar ContentStringFormat para formatear su período de tiempo: