3

私のMV-VMアプリケーションでは、ユーザーのアバターを表示する必要があります。画像は、ViewModelオブジェクトのタイプImageSourceのプロパティで提供されます。それが私が現在持っているものです:

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

ただし、一部のユーザーはアバターを構成していない可能性があるため、UserAvatarはnullです。その場合、デフォルトのアバターを表示したいと思います。デフォルトの画像はプレゼンテーションの問題であるため、ビュー以外の誰もがデフォルトの画像について知っている必要はありません。

したがって、指定されたImageSourceを使用して画像を表示する方法、またはImageSourceがの場合は特定のリソースを表示するにはどうすればよいですかnull。DataTriggersで何らかのDataTemplateを使用する必要がありますか?今から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 に答える