2013-05-05 2 views
0

Я пытаюсь привязать TextBlock к TimeSpan, но мне нужно форматировать так, чтобы, если TotalMinutes меньше 60, он должен показать «X min», иначе он должен показать «X h».Условная привязка данных к TimeSpan?

Возможно ли это? Это может потребовать тестирования логики tom в xaml?

ответ

3

Вы должны использовать пользовательскую реализацию IValueConverter. Есть несколько учебников об этом, например. Data Binding using IValueConverter in Silverlight.

Ваше IValueConverter реализация должна выглядеть так:

public class TimeSpanToTextConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, 
     object parameter, System.Globalization.CultureInfo culture) 
    { 
     if (!(value is TimeSpan)) 
      throw new ArgumentException("value has to be TimeSpan", "value"); 

     var timespan = (TimeSpan) value; 

     if (timespan.TotalMinutes > 60) 
      return string.Format("{0} h", timespan.Hours.ToString()); 
     return string.Format("{0} m", timespan.Minutes.ToString()); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, 
     System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 
Смежные вопросы