1

我正在尝试使用 Xamarin.Forms 4.6.0.726 中的 MultiTrigger 根据 2 个不同的布尔值设置条目 IsEnabled 属性。我也尝试过上一个稳定的 4.5 版本。

不幸的是,无论' 值设置为什么,该Entry IsEnabled属性似乎都保持不变(在这种情况下,为真)。Setter

我在下面的代码示例中尝试了两种类型的 BindingCondition。第一个(未注释的)条件绑定到页面上其他两个元素的 IsVisible 属性。和将按预期切换其可见性,但StackLayout不会改变。ImageEntry IsEnabled

第二段代码直接绑定到 ViewModel 中的值,实现 INotifyPropertyChanged,但在IsEnabled值不变的情况下具有完全相同的结果。

我的想法已经用完了,我开始怀疑这是否是 Xamarin 和 MultiTriggers 的错误。似乎没有大量的人在网上使用它们,而那些我有我的人在第一组代码中似乎是最常见的方式。

<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",当所有条件都为真时,setter使Entry的IsEnabled属性为真。

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

关于Multi triggers,请看:

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

于 2020-05-12T01:47:43.677 回答