Wykorzystanie DataTrigger
Oto pseudo kod tego, co chcę zaimplementować w 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
i poniżej jest próbą wdrożenia z przynajmniej następującymi kwestiami:
skąd wiadomo, że ścieżka AvatarPath była null i że zależy nam na płci?czy istnieje sposób, aby zrobić ELSE, więc mogę określić zasób Gender.Male tylko raz zamiast raz dla każdegoJak mogę to prawidłowo wdrożyć?
Twoje zdrowie,
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>
aktualizacjaJak wskazuje trimeyko, tomógłby można to zrobić za pomocą multikonwertera lub wewnątrz modelu widoku.
Odpowiadając na moje pytanie: „Początkowo wypróbowałem podejście multiconverter, ze skromnym sukcesem, i prawie opublikowałem to, aby pomóc w jego czyszczeniu. Wtedy zdecydowałem, że konwertery najlepiej pozostawić do rzeczywistej konwersji typów. Uzgodnione podejście do modelu widoku jest prawdopodobnie najłatwiejsze ale wydaje się, że to raczej zadanie widoku, i chciałbym sprawdzić, czy mogę go najpierw uruchomić. ”
Podjąłem próbę [rozwiązania tego z zamieszczeniem tutaj mutliConveter] (Wykorzystanie MultiConvertera)