WPF组合框是格式化ItemsSource的更好方法
早上好,伙计们 我有几个组合框绑定到TimeSpan列表。我正在使用IValueConverter和ItemTemplate格式化时间跨度。我想知道是否有一种更简单的方式来格式化时间跨度。以下是我目前正在做的事情WPF组合框是格式化ItemsSource的更好方法,wpf,combobox,format,itemssource,Wpf,Combobox,Format,Itemssource,早上好,伙计们 我有几个组合框绑定到TimeSpan列表。我正在使用IValueConverter和ItemTemplate格式化时间跨度。我想知道是否有一种更简单的方式来格式化时间跨度。以下是我目前正在做的事情 public class TimeSpanConverter : IValueConverter { #region IValueConverter Members public object Convert(object value, Type targetType
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>
公共类时间转换器:IValueConverter
{
#区域转换器成员
公共对象转换(对象值、类型targetType、对象参数、System.Globalization.CultureInfo区域性)
{
如果(值==null)
返回字符串。空;
TimeSpan t=TimeSpan.MinValue;
TimeSpan.TryParse(value.ToString(),out t);
返回“{0:00}:{1:00}”.F(t小时,t分钟);
}
公共对象转换回(对象值、类型targetType、对象参数、System.Globalization.CultureInfo区域性)
{
返回TimeSpan.Parse(value.ToString());
}
#端区
}
您要绑定到的是
时间跨度类型的?如果是这样,那么转换器可以简单得多
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);
}
另外,还有一个一般性的说明-您确定需要在画布上布局UI并使用绝对坐标吗?:) 是的,这是一个时间跨度。我喜欢这个+1.