指定图像源时多重绑定与绑定的特殊行为



当使用转换器绑定到ImageSource属性时,我遇到了一个特殊的行为。

看来,如果我使用带有IValueConverter的简单Binding,该返回对应于图像相对路径的字符串,则一切正常,并且将显示图像。

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

System.Windows.Data 错误: 5 : BindingExpression 生成的值对目标属性无效。Value='' MultiBindingExpression:target element is 'Image' (Name='');目标属性为"源"(类型为"图像源")

我发现要做到这一点

,我无法返回一个简单的字符串(甚至不能返回Uri)。相反,我必须在我的转换器中创建一个 ImageSource(实际上是BitmapImage)并返回它。

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

我发现了另一个可能与此相关的堆栈溢出主题,Alvin 在其中发布了有关解决绑定时间的评论:

我认为多重绑定是在 TextBlock 渲染之后进行的,而(单个)绑定是在 TextBlok 渲染之前进行的 – Avlin

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

感谢您的任何见解!

我认为这是设计使然,但为了确保您需要询问其中一位开发人员,区别在于没有对返回的值应用类型转换 MultiBindings ,人们经常绊倒。

我的工作原理如下(简化代码!

我的 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

相关内容

  • 没有找到相关文章

最新更新