我有一个视图绑定到viewmodel中的字符串资源,它可以很好地链接到Web上的图像或硬盘图像文件。但是,如果选择了错误的图像源,则图像不会显示原因。我是否可以做一个绑定,看看图像是否有一个有效的来源,或者是否有办法放置默认图像,如果来源不好。
ViewModel中的属性:
public string ImageSource
{
get { return imageSource; }
set
{
imageSource = value;
NotifyPropertyChange("ImageSource");
}
}
的Xaml:
<Image Grid.Row="0" Name="picture" Source="{Binding ImageSource}" Height="auto" Width="auto" MaxWidth="750" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" />
绑定工作正常。
答案 0 :(得分:3)
如果对于坏图像保证ImageSource为空,则可以使用数据触发器:
<Image Grid.Row="0" Name="picture" Height="auto" Width="auto" MaxWidth="750" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" >
<Image.Style>
<Style TargetType="{x:Type Image}">
<Setter Property="Source" Value="{Binding ImageSource}" />
<Style.Triggers>
<DataTrigger Binding="{Binding ImageSource}" Value="{x:Null}">
<Setter Property="Source" Value="default_image.png" />
</DataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
答案 1 :(得分:2)
Binding具有TargetNullValue
属性,完全针对您的场景:
<Image Source="{Binding ImageSource,
TargetNullValue={StaticResource DefaultImage}}" />
当然,资源必须在某处定义:<BitmapImage x:Key="DefaultImage" UriSource="default_image" />