我得到了这个绑定的例外
<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属性不接受此值。谁知道原因和解决方案?
答案 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
}