使用转换器绑定到Source
的{{1}}属性时遇到了特殊行为。
如果我使用带有Image
的简单Binding
返回与图像相对路径相对应的字符串,则一切正常并显示图像。
另一方面,如果我使用带有IValueConverter
的{{1}}返回相同的字符串,则绑定不起作用,并且此错误消息显示在VS2010输出窗口中:
System.Windows.Data错误:5:BindingExpression生成的值对目标属性无效。 Value =''MultiBindingExpression:目标元素是'Image'(Name =''); target属性是'Source'(类型'ImageSource')
我发现为了这个工作,我不能返回一个简单的字符串(甚至不是MultiBinding
)。我不得不在我的转换器中创建一个ImageSource(实际上是IMultiValueConverter
)并将其返回。
你知道为什么会发生这种奇怪的行为吗?这是Uri
和BitmapImage
之间的已知差异,还是一个错误?
我发现another stackoverflow topic可能与此有关,其中Alvin发布了关于绑定解决时间的评论:
我认为MultiBinding是在TextBlock渲染之后制作的,并且(单个)绑定BEFORE TextBlok渲染之后 - Avlin
为了说明这个问题,我写了一个小项目,你可以download and test。
感谢您的任何见解!
答案 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