多重绑定在 XAML/WPF 中不起作用
Multibind not working in XAML/WPF
我需要计算 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();
}
}
此转换器与另一个多重绑定(使用 Setter、另一个控件)一起工作,但它不适用于 ItemsControl.Width。有什么理由吗?当达到多重绑定时,它会崩溃:
"'System.Windows.Markup.XamlParseException' 发生在 PresentationFramework.dll
'设置 属性 'System.Windows.Data.MultiBinding.Converter' 抛出异常。'"
我找不到关于该异常的更多信息,调试器输出仅指出在第 266 行(具有转换器属性的多重绑定的第一行)引发了异常。再次值得注意的是,这个完全相同的多绑定转换器和语法在另一个 xaml 控件中工作,但是一旦我把它放在 ItemsControl.Width 中,它就开始抛出异常并崩溃。
我在转换器上设置了一个断点,但我什至没有到达代码。
我已经通过更改我使用的绑定路径解决了我的问题。我不确定为什么 CurrentFrame 和 CurrentZoom 一起抛出错误但使用不同的路径(具体来说,为 CurrentZoom 指定一个相对来源)我能够得到我需要的结果。转换器并不是真正的问题,尽管将 (double)
转换为 System.Convert.ToDouble
摆脱了 InnerException。我还将 ToInt32
转换也更改为 double。
我需要计算 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();
}
}
此转换器与另一个多重绑定(使用 Setter、另一个控件)一起工作,但它不适用于 ItemsControl.Width。有什么理由吗?当达到多重绑定时,它会崩溃:
"'System.Windows.Markup.XamlParseException' 发生在 PresentationFramework.dll
'设置 属性 'System.Windows.Data.MultiBinding.Converter' 抛出异常。'"
我找不到关于该异常的更多信息,调试器输出仅指出在第 266 行(具有转换器属性的多重绑定的第一行)引发了异常。再次值得注意的是,这个完全相同的多绑定转换器和语法在另一个 xaml 控件中工作,但是一旦我把它放在 ItemsControl.Width 中,它就开始抛出异常并崩溃。
我在转换器上设置了一个断点,但我什至没有到达代码。
我已经通过更改我使用的绑定路径解决了我的问题。我不确定为什么 CurrentFrame 和 CurrentZoom 一起抛出错误但使用不同的路径(具体来说,为 CurrentZoom 指定一个相对来源)我能够得到我需要的结果。转换器并不是真正的问题,尽管将 (double)
转换为 System.Convert.ToDouble
摆脱了 InnerException。我还将 ToInt32
转换也更改为 double。