2009-07-30 19 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