2009-07-30 9 views
3

私のM-V-VMアプリケーションでは、ユーザーのアバターを表示する必要があります。イメージは、ViewModelオブジェクトのImageSource型のプロパティで提供されます。 UserAvatarがnullあるのでDataContextに依存する条件付きフレームワーク要素

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

はしかし、一部のユーザーは、アバターが設定されていない場合があります。だから、私は現在持っているものです。その場合、私はデフォルトのアバターを表示したいです。誰もがプレゼンテーションの懸念があるので、ビューはデフォルトのイメージについて知っていなければなりません。

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

答えて

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> 

や状況におけるデフォルトのブツが全く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> 

・ホープ、このことができます。..

+1

1は:)それに –

+0

私を打つしかし、どの程度UserAvatarがない場合のデフォルト画像別のContentControl? nullでないDataTriggerが必要なようです。私はちょうどカスタムValueConverterを提案するhttp://stackoverflow.com/questions/356194/wpf-datatrigger-where-value-is-not-nullを発見しました。 –

+0

D'uh。読むことを学ぶべきである。あなたは解決策です、まさに私が探していた、Arcturusです。あなたの答えを受け入れる前に残っているポイントは1つだけです:デフォルトのアバターはImageSourceではなくキャンバスなので、Imageエレメントは何らかの形で(または非表示に)置き換えなければなりません。 –

関連する問題