将字符串格式和转换器绑定在一起



我从网络服务中获取用户的头像网址(User.Avatar):

 /users/user_id/12?last_update=timestamp

在不同的控件中,我必须使用不同大小的头像(Web 服务可以裁剪和调整图像大小):

 ImageSource="{Binding User.Avatar, StringFormat=http://myurl.com/{0}/crop/110x110, Converter={StaticResource ImageSizeUrlConverter}}"/>

转换器必须采取

http://myurl.com/users/user_id/12?last_update=timestamp/crop/110x110(带StringFormat

并返回

http://myurl.com/users/user_id/12/crop/110x110?last_update=timestamp

但是转换器需要/users/user_id/12?last_update=timestamp(没有StringFormat)。

这是正常行为?

嗯,应该是这样的。可以将任何值绑定到字符串依赖项属性。转换器用于从类型转换为目标类型。而且由于字符串格式仅适用于字符串,因此在转换器之前采取行动是没有意义的,只有后记。

下面是一个示例:

{Binding SomeBoolValue,
         StringFormat=You said {0},
         Converter={StaticResource BoolToString}}

其中,BoolToStringtrue返回"是",为false返回"否"。格式化必须在将源类型转换为目标类型后进行。

您可以将数据作为ConverterParameter发送,但不能绑定到静态属性。最好的解决方案是在此处创建一个执行绑定和转换的附加属性。

最新更新