1

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>
4

1 に答える 1

2

zafar が言ったように、デフォルトで Entry IsEnable="False"を設定する必要があります。すべての条件が true の場合、セッターは Entry の IsEnabled プロパティを true にします。

<StackLayout>
            <Entry IsEnabled="False" 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" />

                        </MultiTrigger.Conditions>
                        <Setter Property="IsEnabled" Value="True" />
                    </MultiTrigger>
                </Entry.Triggers>
            </Entry>
        </StackLayout>

マルチトリガーについては、以下をご覧ください。

https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/triggers

于 2020-05-12T01:47:43.677 に答える