これが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がnullであり、性別を気にしていることをどのようにして知ることができますか?
- ELSEを実行する方法があるので、Gender.Maleリソースを1回ずつではなく1回だけ指定できます。
これを適切に実装するにはどうすればよいですか?
乾杯、
ベリール
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の使用法)を試みました