使用IMultiValueConverter绑定到TimeSpan字段

时间:2014-07-30 23:20:04

标签: wpf

我得到了这个绑定的例外

<TextBlock.Text>
  <MultiBinding Converter="{StaticResource converter}" Mode="OneWay">
    <Binding Path="TimeSpanProperty" />
    <Binding Path="FormsttingOption" />
  </MultiBinding>
</TextBlock.Text>


// converter.Convert code
if (formsttingOption == DurationFormat.Minutes)
  return Math.Round(timeSpan.TotalMinutes);
else
  return duration;

BindingExpression生成的值对目标属性无效。值=&#39; 164&#39; MultiBindingExpression:目标元素是&#39; TextBlock&#39; (名称=&#39;&#39);目标属性是&#39; Text&#39; (键入&#39; String&#39;)

转换器将根据格式化选项转换TimeSpan值。在上面的示例中,FormattingOption是分钟,这意味着TimeSpan值将转换为分钟(164)。

由于某种原因,Text属性不接受此值。谁知道原因和解决方案?

1 个答案:

答案 0 :(得分:2)

我认为错误解释得非常好:

  

BindingExpression生成的值对目标属性无效。值=&#39; 164&#39; MultiBindingExpression:目标元素是&#39; TextBlock&#39; (名称=&#39;&#39);目标属性是&#39; Text&#39; (键入&#39; String&#39;)

它告诉您TextBlock.Text的类型为String且您的转换器未生成有效值。

IMultiValueConverter.Convert方法中,确保您返回String,即

public object Convert(object[] values, Type targetType, Object parameter, CultureInfo culture)
{
    var timeSpan = (TimeSpan)values[0];
    var formattingOption = (DurationFormat)values[1];
    if(formattingOption == DurationFormat.Minutes)
    {
        return Math.Round(timeSpan.TotalMinutes).ToString(culture);
    }
    return duration.ToString(); // TODO not sure where duration comes from
}