2010-02-08 15 views
0

上午傢伙,WPF組合框一種更好的方式來格式化的ItemsSource

我勢必時間跨度中列出幾個組合框。我正在使用IValueConverter和ItemTemplate格式化TimeSpans。我想知道是否有更簡單的方法來格式化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); 
} 

而且也,總體意見 - 你肯定需要佈置在Canvas和使用絕對座標的UI? :)

+0

是的,這是一個TimeSpan。我喜歡這個轉換。 +1。 – Steve 2010-02-08 20:47:26