【发布时间】:2012-05-25 01:11:59
【问题描述】:
这是我想在 xaml 中实现的伪代码
IF vm.AvatarFilePath IS NOT NULL THEN
Image.Source = {Binding AvatarPath}
ELSE
If vm.Gender == {x:Static vm:Gender.Female} THEN
Image.Source = {StaticResource Img_Female}
ELSE
Image.Source = {StaticResource Img_Male}
ENDIF
ENDIF
以下是至少存在以下问题的实现尝试:
- 它如何知道 AvatarPath 为空并且我们关心 Gender?
- 有没有办法做 ELSE,所以我可以只指定一次 Gender.Male 资源,而不是每个
我怎样才能正确地实现它?
干杯,
浆果
xaml 尝试 1
<DataTemplate x:Key="AvatarPathTemplate">
<Image x:Name="avatarImage" Source="{Binding AvatarPath}"/>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding Gender}" Value="{x:Static vm:Gender.Female}">
<Setter Property="Sourrce" Value="{resx:Resx Img_Female}"/>
</DataTrigger>
<DataTrigger Binding="{Binding Gender}" Value="{x:Static vm:Gender.Male}">
<Setter Property="Sourrce" Value="{resx:Resx Img_Male}"/>
</DataTrigger>
<DataTrigger Binding="{Binding Gender}" Value="{x:Static vm:Gender.Unknown}">
<Setter Property="Sourrce" Value="{resx:Resx Img_Male}"/>
</DataTrigger>
<DataTrigger Binding="{Binding Gender}" Value="{x:Static vm:Gender.Unspecified}">
<Setter Property="Sourrce" Value="{resx:Resx Img_Male}"/>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
更新
正如 trimeyko 所指出的,这可以通过多转换器或视图模型内部来完成。
根据我的回答:“我实际上首先尝试了多转换器方法,并取得了一定的成功,并且几乎将其发布以帮助清理它。然后我决定最好让转换器实际转换类型。同意视图模型方法可能是最简单的,但这似乎更像是视图的工作,我想看看我是否可以先让它像这样工作。”
我尝试 [通过在此处发布 mutliConveter 解决此问题] (MultiConverter usage)
【问题讨论】:
标签: wpf xaml data-binding datatrigger