2009-07-30 61 views
3

在我的M-V-VM应用程序中,我必须显示用户的头像。该图像是在ImageSource类型的ViewModel对象的属性中提供的。所以,这就是我目前有:取决于DataContext的条件框架元素

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

然而,一些用户可能没有配置一个化身,因此UserAvatar是null。在这种情况下,我想显示一个默认的头像。没有人,但视图必须知道默认图像,因为这只是一个介绍的关注。

那么如何使用给定的ImageSource显示图像,或者在ImageSource为null的情况下显示图像。我是否必须在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打我吧:) – 2009-07-30 13:06:22