Xamarin.Forms 4.6.0.726 で MultiTrigger を使用して、2 つの異なるブール値に基づいて設定するエントリ IsEnabled プロパティを取得しようとしています。最後の安定した 4.5 バージョンでも試しました。
残念ながら、Entry IsEnabled
プロパティはSetter
の値が設定されているもの (この場合は true) にとどまっているようです。
以下のコード サンプルでは、2 種類の BindingCondition を試しました。最初の (コメント化されていない) 条件は、ページ上の他の 2 つの要素の IsVisible プロパティにバインドされています。StackLayout
と は期待Image
どおりに可視性を切り替えますが、Entry IsEnabled
は変更されません。
2 番目のコード スニップは、ViewModel の値に直接バインドし、INotifyPropertyChanged を実装しますが、IsEnabled
値が変更されない場合とまったく同じ結果になります。
アイデアが尽きたので、これは Xamarin と MultiTrigger のバグなのだろうかと考え始めています。それらをオンラインで使用している人はそれほど多くないようで、最初のコードセットで最も一般的な方法と思われる方法で設定しました。
<StackLayout x:Name="ButtonsStack" IsVisible="{Binding Invoice.Editable}">
<!-- Content Here -->
</StackLayout>
<Image x:Name="InvoiceImage" IsVisible="{Binding IsUploadInvoice}" />
<StackLayout Orientation="Horizontal" HorizontalOptions="End">
<Entry Text="{Binding Invoice.TotalAmount}">
<Entry.Triggers>
<MultiTrigger TargetType="Entry">
<MultiTrigger.Conditions>
<BindingCondition Binding="{Binding Source={x:Reference ButtonsStack}, Path=IsVisible}" Value="True"/>
<BindingCondition Binding="{Binding Source={x:Reference InvoiceImage}, Path=IsVisible}" Value="True"/>
<!--<BindingCondition Binding="{Binding Invoice.Editable}" Value="True"/>
<BindingCondition Binding="{Binding IsUploadInvoice}" Value="True"/>-->
</MultiTrigger.Conditions>
<Setter Property="IsEnabled" Value="True"/>
</MultiTrigger>
<Entry.Triggers>
<Entry>
</StackLayout>