指定ImageSource时MultiBinding与Binding的特殊行为

时间:2012-04-12 17:02:36

标签: wpf binding multibinding imagesource

使用转换器绑定到Source的{​​{1}}属性时遇到了特殊行为。

如果我使用带有Image的简单Binding返回与图像相对路径相对应的字符串,则一切正常并显示图像。

另一方面,如果我使用带有IValueConverter的{​​{1}}返回相同的字符串,则绑定不起作用,并且此错误消息显示在VS2010输出窗口中:

  

System.Windows.Data错误:5:BindingExpression生成的值对目标属性无效。 Value =''MultiBindingExpression:目标元素是'Image'(Name =''); target属性是'Source'(类型'ImageSource')

我发现为了这个工作,我不能返回一个简单的字符串(甚至不是MultiBinding)。我不得不在我的转换器中创建一个ImageSource(实际上是IMultiValueConverter)并将其返回。

你知道为什么会发生这种奇怪的行为吗?这是UriBitmapImage之间的已知差异,还是一个错误?

我发现another stackoverflow topic可能与此有关,其中Alvin发布了关于绑定解决时间的评论:

  

我认为MultiBinding是在TextBlock渲染之后制作的,并且(单个)绑定BEFORE TextBlok渲染之后 - Avlin

为了说明这个问题,我写了一个小项目,你可以download and test

感谢您的任何见解!

2 个答案:

答案 0 :(得分:1)

我认为这是设计的,但是为了确保您需要询问其中一位开发人员,区别在于MultiBindings返回的值没有type conversion,人们经常旅行。

答案 1 :(得分:0)

我已经按照如下方式工作(简化代码!)

我的XAML:

<MediaElement LoadedBehavior="Play" Stretch="UniformToFill">
    <MediaElement.Source>
        <MultiBinding Converter="{StaticResource ActionMedia_Converter}"> 
            <Binding Path="HomeW_Background_FileName" />
            <Binding Path="HomeW_Background_FileType" />
        </MultiBinding>
    </MediaElement.Source>
</MediaElement>

我的转换器:

Public Class ActionMedia_Converter
	Implements IMultiValueConverter

	Public Function Convert(values As Object(), TargetType As Type, parameter As Object, culture As CultureInfo) As Object Implements IMultiValueConverter.Convert
		Dim ImageSource As String

		ImageSource = String.Concat(values(0), ".", values(1))

		Dim MyUri = New System.Uri(ImageSource)
		
		Return MyUri

	End Function

	Public Function ConvertBack(values As Object, targetTypes As Type(), parameter As Object, culture As CultureInfo) As Object() Implements IMultiValueConverter.ConvertBack
		Return Binding.DoNothing
	End Function

End Class