質問

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

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

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

では、指定されたImageSourceで画像を表示する方法、またはImageSourceが null の場合に特定のリソースを表示するにはどうすればよいですか。 DataTriggersで何らかのDataTemplateを使用する必要がありますか?今からItemsControlsにのみ使用しているので、わかりません。

役に立ちましたか?

解決

あなたが正しく推測したように、テンプレートとトリガーは確かにあなたの友人です。

これは、 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>

そして、デフォルトのものが ImageSource でなく、他のコントロールで少し遊んでみたいという状況では、いつでも 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>

これが役立つことを願って..

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top