这是我想在 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 用法)