我有一个自定义用户控件,必须动态地显示图像'基于我的用户控件绑定的属性的值。
实施例
<Image Source="Resources/{0}.png" />
图片的源属性不完整:缺少的值{0}应该以某种方式替换为我的模型值来检索图像。
我如何在wpf中实现这一目标? 谢谢
答案 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}}"/>