【问题标题】:Formatting a bound property格式化绑定属性
【发布时间】:2014-07-04 08:42:30
【问题描述】:

我想将 Slider 的 Value 绑定到 Label 的 Content。滑块的值设置时间跨度。滑块的值是以分钟为单位的时间跨度(值 5 = 5 分钟)。

这是我的标签 XAML:

<Label
  Content="{Binding Value, ElementName=sld_Timespan}"
  ContentStringFormat="{}{0:HH:mm}"
/>

我可以绑定它们。值是正确的。但是格式不对。

对于ContentStringFormat,我尝试了不同的设置,例如在this (TextBlock in Silverlight)this (TextBlock Multibinding) 站点上。我还使用了数据绑定对话框并将 StringFormat 设置为 {0:G}(您可以从 ComboBox 中选择)或其他设置。

我只得到一个“格式化”为双精度值的值,例如“1”或“13.423523423”。

我也尝试过 TextBlock。同样的问题。

我的 XAML 代码有什么问题?

【问题讨论】:

  • 您可能需要一个值转换器。收到的错误是什么?
  • @Samuel 我没有收到错误消息。我检查了一下:我可以输入所有内容,我没有收到任何错误。似乎 Visual Studio 隐藏了格式错误。
  • 你检查了Visual Studio的输出选项卡吗?它可能包含一些关于绑定问题等的信息。
  • @fedab Value 属于 Sliderdouble 类型。将Label.Content 绑定到TimeSpan 属性
  • 正如 dkozl 所说,Value 属性是 double 类型,因此不会被 ContentStringFormat 格式化为 TimeSpan。将 Content 绑定到 TimeSpan 类型的视图模型属性,或使用绑定转换器。

标签: c# wpf xaml data-binding


【解决方案1】:

在 Clemens 发表评论后,我明白出了什么问题。我写了一个简单的转换器:

public class DoubleToTimespanConverter : IValueConverter
{

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return TimeSpan.FromMinutes((double)value).ToString(@"hh\:mm\:ss"); 
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

并添加到我的 XAML:

<UserControl.Resources>
    <!--local is my local namespace-->
    <local:DoubleToTimespanConverter x:Key="converter"/>
</UserControl.Resources>

我可以轻松地将“转换器”设置为我的转换器。

【讨论】:

  • 你可能更喜欢写TimeSpan.FromMinutes((double)value),如果你以后碰巧看到这个更容易理解。
  • @Clemens 我改了。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-08
  • 2020-10-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多