2010-02-08 3 views
0

Утро Ребят,WPF ComboBox лучшего способ форматирования ItemsSource

У меня есть несколько ComboBoxes присоединенного к Списку TimeSpan. Я форматирую TimeSpans с помощью IValueConverter и ItemTemplate. Мне было интересно, есть ли более простой способ отформатировать TimeSpans. Вот что я сейчас делаю.

public class TimeSpanConverter : IValueConverter 
{ 
    #region IValueConverter Members 

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if (value == null) 
      return string.Empty; 

     TimeSpan t = TimeSpan.MinValue; 
     TimeSpan.TryParse(value.ToString(), out t); 
     return "{0:00}:{1:00}".F(t.Hours,t.Minutes); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     return TimeSpan.Parse(value.ToString()); 
    } 

    #endregion 
} 

<Canvas> 
    <Canvas.Resources> 
     <bc:TimeSpanConverter x:Key="ts" /> 
     <DataTemplate x:Key="TimeSpanTemplate"> 
     <TextBlock Text="{Binding ., Converter={StaticResource ts}}" /> 
     </DataTemplate> 

    </Canvas.Resources> 
    <TextBlock Canvas.Left="6" 
       Canvas.Top="6" 
       Height="21" 
       Name="textBlock4" 
       Text="Begin" 
       Width="40" /> 

    <TextBlock Canvas.Left="81" 
       Canvas.Top="6" 
       Height="21" 
       Name="textBlock5" 
       Text="End" 
       Width="40" /> 
    <ComboBox Canvas.Left="7" 
       Canvas.Top="25" 
       Height="23" 
       Name="TimeBeginCombo" 
       ItemTemplate="{StaticResource TimeSpanTemplate}" 
       SelectedItem="{Binding TimeBegin}"     
       Width="68" /> 
    <ComboBox Canvas.Left="81" 
       Canvas.Top="25" 
       Height="23" 
       Name="TimeEndCombo" 
       ItemTemplate="{StaticResource TimeSpanTemplate}" 
       SelectedItem="{Binding TimeEnd}" 
       Width="68" /> 

    </Canvas> 
</GroupBox> 

ответ

2

Это то, что вы связываете с типа TimeSpan? Если это так, то преобразователь может быть намного проще

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
{ 
    if (!(value is TimeSpan)) 
     return string.Empty; 

    TimeSpan t = (TimeSpan)value; 
    return "{0:00}:{1:00}".F(t.Hours,t.Minutes); 
} 

А также общее замечание - вы уверены, что вам нужно макет вашего пользовательского интерфейса на холсте и с использованием абсолютных координат? :)

+0

Да, это TimeSpan. Мне это нравится. +1. – Steve