Использование DataTrigger
Вот псевдокод для того, что я хочу реализовать в 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
и ниже - попытка реализации, по крайней мере, со следующими проблемами:
how does it know the AvatarPath was null and that we care about Gender? is there a way to do ELSE, so I can specify the Gender.Male resource only once instead of once each forКак я могу реализовать это правильно?
Ура,
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>
update
Как указывает тримейко, этоcould быть сделано или с мультиконвертером или внутри модели представления.
В ответ на мой ответ: «Сначала я попробовал подход с несколькими конвертерами, но с небольшим успехом, и почти опубликовал это, чтобы помочь его очистить. Затем я решил, что конвертеры лучше всего использовать для преобразования типов. Согласованный подход модели представления является, вероятно, самым простым, но это, похоже, больше работа представления, и я хотел бы посмотреть, смогу ли я сначала заставить его работать таким образом ».
Я попытался [решить эту проблему с помощью MutliConveter, опубликовавшего здесь] (Использование мультиконвертера)