1

我在代码中创建了一个Image.Source-String绑定,例如:

var newBinding = new System.Windows.Data.Binding()
  {
    Path = new PropertyPath("MyImageUrl")
  };
BindingOperations.SetBinding(attachedObject, Image.SourceProperty, newBinding);

这种方法适用于例如TextBlock.TextProperty-String绑定,但对于Image.Source-String我理想情况下希望Binding自动为我插入转换 - 就像我使用 Xaml 绑定时所做的那样:

<Image Source="{Binding ImageUrl}" />

我意识到我可以添加自己的转换器来模拟 Xaml 绑定行为,但我想看看是否有某种方法可以完全按照 Xaml 的方式进行操作。

有没有办法让新的在基于代码的绑定评估期间Binding自动添加它自己的字符串->BitmapImage ?ValueConverter

4

1 回答 1

4

System.Windows.Media.ImageSource 有一个TypeConverterAttribute

[TypeConverter(typeof(ImageSourceConverter))]

绑定会自动查找并使用转换器。

如果您查看,ImageSourceConverter您可以看到它可以转换的类型:

if (sourceType == typeof(string) || 
    sourceType == typeof(Stream) || 
    sourceType == typeof(Uri) || 
    sourceType == typeof(byte[]))
{
    return true;
}

为了模仿这个过程,您必须TypeConverterAttribute在要绑定的属性的类型上添加一个。

您可以通过 1. 控制类型或 2.TypeDescriptor在运行时添加属性来做到这一点。这里有一个关于这个的问题。

于 2013-05-25T20:13:45.533 回答