3

在我的 MV-VM 应用程序中,我必须显示用户的头像。图像在 ViewModel 对象的 ImageSource 类型的属性中提供。这就是我目前所拥有的:

<Image Source="{Binding Path=UserAvatar}"/>

但是,有些用户可能没有配置头像,所以 UserAvatar 是null. 在这种情况下,我想显示一个默认头像。除了视图之外没有人必须知道默认图像,因为它只是表示的问题。

那么如何使用给定的 ImageSource 显示图像,或者如果 ImageSource 是null. 我是否必须将某种 DataTemplate 与 DataTriggers 一起使用?从现在开始我只将它们用于 ItemsControls,所以我不知道。

4

1 回答 1

6

正如您猜对的那样,模板和触发器确实是您的朋友。

这是一个使用的实现ContentControl

<ContentControl Content="{Binding Path=UserAvatar}">
    <ContentControl.ContentTemplate>
        <DataTemplate>
            <Image x:Name="image" Source="{Binding}"/>
            <DataTemplate.Triggers>
                <DataTrigger Binding="{Binding}" Value="{x:Null}">
                    <Setter TargetName="image" Property="Source" Value="--your awesome default image here--" />
                </DataTrigger>
            </DataTemplate.Triggers>
        </DataTemplate>
    </ContentControl.ContentTemplate>
</ContentControl>

在您的默认值是 noImageSource并且您希望与其他控件一起玩一点的情况下,您总是可以求助于该Visibilty属性:

<ContentControl Content="{Binding Path=UserAvatar}">
    <ContentControl.ContentTemplate>
        <DataTemplate>
            <Grid>
                <Image x:Name="image" Source="{Binding}" />
                <Canvas x:Name="defaultImage" Visibility="Collapsed" />
            </Grid>
            <DataTemplate.Triggers>
                <DataTrigger Binding="{Binding}" Value="{x:Null}">
                    <Setter TargetName="image" Property="Visibility" Value="Collapsed" />
                    <Setter TargetName="defaultImage" Property="Visibility" Value="Visible" />
                </DataTrigger>
            </DataTemplate.Triggers>
        </DataTemplate>
    </ContentControl.ContentTemplate>
</ContentControl>

希望这可以帮助..

于 2009-07-30T13:03:43.937 回答