Wpf显示图像动态URI

时间:2014-12-19 16:38:27

标签: c# wpf

我有一个自定义用户控件,必须动态地显示图像'基于我的用户控件绑定的属性的值。

实施例

   <Image Source="Resources/{0}.png" />

图片的源属性不完整:缺少的值{0}应该以某种方式替换为我的模型值来检索图像。

我如何在wpf中实现这一目标? 谢谢

2 个答案:

答案 0 :(得分:0)

您可以通过向视图模型添加其他属性来解决此问题。

查看型号代码:

    private string _yourProperty;

    public string YourProperty
    {
        get { return _yourProperty; }
        set
        {
            if (_yourProperty == value) return;
            _yourProperty = value;
            OnPropertyChanged("YourProperty");
            OnPropertyChanged("YourImageSource");
        }
    }

    //this code is just for demo.
    public BitmapImage YourImageSource
    {
        get
        {
            return new BitmapImage(BuildUriFromYourProperty());
        }
    }

Xaml代码:

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

答案 1 :(得分:0)

我使用值转换器解决了:

 public class ImageSelector : IValueConverter
 {
     public object Convert( object value, Type targetType, object parameter, CultureInfo culture )
     {
         if( value == null )
             return null;

         string basePath = System.IO.Path.Combine( Directory.GetCurrentDirectory(), @"Resources\Devices" );
         string imageName = String.Format( "{0}.png", value.ToString() );
         string imageLocation = System.IO.Path.Combine( basePath, imageName );

         if( !File.Exists( imageLocation ) )
            imageLocation = System.IO.Path.Combine( basePath, "ImageUnavailable.png" );

         return new BitmapImage( new Uri( imageLocation ) );
     }

     public object ConvertBack( object value, Type targetType, object parameter, CultureInfo culture )
     {
         throw new NotImplementedException();
     }
}

XAML:

 <UserControl.Resources>
        <local:ImageSelector x:Key="imageSelector"/>
 </UserControl.Resources>

 ...

 <Image Source="{Binding Converter={StaticResource imageSelector}}"/>