【发布时间】:2015-05-03 08:11:46
【问题描述】:
我有一个多重绑定调用具有两个绑定的转换器。由于某种原因,它不返回任何东西。我把
<ItemsControl.Width>
<MultiBinding Converter="{StaticResource ResourceKey=TimelineWidthConverter}">
<Binding Path="AnimationManager.MaxFrame" ElementName="UC" />
<Binding Path="AnimationManager.CurrentZoom" RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type local:TimelineAnimationView}}" />
</MultiBinding>
</ItemsControl.Width>
在 XAML 文件中,转换器读取:
internal class MaterialTimelineWidthConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (values == null || values.Length != 2 || ReferenceEquals(values[0], DependencyProperty.UnsetValue) || ReferenceEquals(values[1], DependencyProperty.UnsetValue))
{
return 240;
}
var maxFrame = System.Convert.ToInt32(values[0]);
var currentZoom = System.Convert.ToInt32(values[1]);
return currentZoom*maxFrame;
}
public object[] ConvertBack(object values, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotSupportedException();
}
}
奇怪的是,如果我将 XAML 文件更改为:
<ItemsControl.Width>
280
</ItemsControl.Width>
它可以工作,但如果我只是在转换器中返回 280,它就不会做任何事情。就好像它什么都不返回,但没有给出任何错误。
转换器以前工作过,当时它只是一个单值转换器(传统绑定,没有多重绑定),但是一旦我添加了第二个属性并将其设为多重,它就不起作用了。有什么建议吗?
【问题讨论】:
-
您的转换器应该返回一个
double值,而不是int。 -
@EliEgseem 我同意@Clemens,问题出在您的转换器类中,同时尝试将
double转换为int。请尝试将值数组项转换为double。 -
您已经在 previous question 的转换器中正确完成了它:-)
-
是的,它们是两个不同的转换器,但想法是一样的。由于某种原因,另一个崩溃了,但这个没有。感谢您的输入。我会选择一个答案,然后我今晚试一试。
标签: c# wpf xaml converter multibinding