Uso de DataTrigger
Aqui está o pseudo código para o que eu quero implementar em 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
e abaixo é uma tentativa de implementação com pelo menos os seguintes problemas:
como ele sabe que o AvatarPath era nulo e que nos importamos com o Gender?existe uma maneira de fazer o ELSE, então eu posso especificar o recurso Gender.Male apenas uma vez, em vez de uma vez para cadaComo posso implementar isso corretamente?
Felicidades,
Berryl
<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>
atualizarComo trimeyko aponta, estepoderia ser feito com um multiconverter ou dentro de um modelo de visão.
De acordo com minha resposta: "Eu na verdade tentei a abordagem multiconverter no início, com um sucesso modesto, e quase postei isso para ajudar a limpá-la. Então decidi que é melhor converter os conversores em tipos. Concordou que a abordagem do modelo de visualização é provavelmente mais fácil mas isso parece ser mais o trabalho da visão, e eu gostaria de ver se posso fazê-lo funcionar como tal primeiro. "
Eu fiz minha tentativa de [resolver isso com uma postagem mutliConveter aqui] (Uso de MultiConverter)