Multibind在XAML / WPF中不起作用

时间:2015-02-26 20:48:57

标签: c# wpf xaml multibinding

我需要计算ItemsControl WPF项目的宽度,但是我需要传递的不是一个而是两个参数。这是它的样子:

<ItemsControl.Width>
   <MultiBinding Converter="{StaticResource animationKeyPositionConverter}">
      <Binding Path="CurrentFrame" ElementName="UC" />
      <Binding Path="CurrentZoom" ElementName="UC" />
   </MultiBinding>
</ItemsControl.Width>

转换器看起来像:

internal class AnimationKeyPositionConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        var frame = System.Convert.ToInt32(values[0]);
        var zoom = System.Convert.ToDouble(values[1]);

        return (double)(frame * zoom);
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        throw new NotSupportedException();
    }
}

此转换器使用另一个multibind(使用Setter,另一个控件),但它不适用于ItemsControl.Width。有什么理由吗?到达多重绑定时,它会崩溃:

&#34;&#39; System.Windows.Markup.XamlParseException&#39;发生在PresentationFramework.dll

&#39;设置属性&#39; System.Windows.Data.MultiBinding.Converter&#39;抛出异常。&#39;&#34;

我找不到关于异常的更多信息,调试器输出仅指出第266行(具有converter属性的multibind的第一行)引发了异常。值得注意的是,这个完全相同的multibind转换器和语法在另一个xaml控件中工作,但是一旦我将它放在ItemsControl.Width中,它就开始抛出异常并崩溃。

我在转换器上设置了一个断点,甚至没有达到代码。

1 个答案:

答案 0 :(得分:0)

我通过更改我正在使用的绑定路径解决了我的问题。我不确定为什么CurrentFrame和CurrentZoom一起抛出错误但使用不同的路径(具体来说,指定CurrentZoom的相关源)我能够得到我需要的结果。尽管将(double)转换更改为System.Convert.ToDouble摆脱了InnerException,但转换器并不是真正的问题。我还将ToInt32转换更改为双倍。