3

使用转换器绑定到 的Source属性时,我遇到了一种特殊行为。Image

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

另一方面,如果我将 aMultiBinding与 aIMultiValueConverter返回相同的字符串一起使用,则绑定不起作用,并且此错误消息将显示在 VS2010 输出窗口中:

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

我发现要让它起作用,我不能返回一个简单的字符串(甚至不能返回一个Uri)。相反,我必须在我的转换器中创建一个 ImageSource (BitmapImage实际上是 a )并返回它。

你知道为什么会发生这种奇怪的行为吗?Binding这是and之间的已知区别MultiBinding,还是一个错误?

我发现了另一个可能与此相关的 stackoverflow 主题,Alvin 在其中发表了关于解决绑定时间的评论:

我认为 MultiBinding 是在 TextBlock 渲染之后进行的,并且在 TextBlok 渲染之前进行(单个)Binding – Avlin

为了说明这个问题,我写了一个可以下载和测试的小项目。

感谢您的任何见解!

4

2 回答 2

1

我会假设这是设计使然,但为了确保您需要询问其中一位开发人员,不同之处在于没有将类型转换应用于返回的值MultiBindings,人们经常会遇到这种情况。

于 2012-04-12T17:06:09.880 回答
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

于 2019-06-18T09:16:20.643 回答