我试图使用IsEnabled 4.6.0.726中的MultiTrigger来根据两个不同的布尔值来设置条目Xamarin.Forms属性。我也尝试过在上一个稳定的4.5版本。
不幸的是,无论Entry IsEnabled的值设置为什么,Setter属性似乎都保持不变(在本例中,为true)。
我在下面的代码示例中尝试了这两种类型的BindingCondition。第一个(未注释)条件绑定到页面上其他两个元素的IsVisible属性。StackLayout和Image将按预期切换它们的可见性,但是Entry IsEnabled不会改变。
第二个代码片段直接绑定到ViewModel中的值,实现INotifyPropertyChanged,但IsEnabled值不变的结果完全相同。
我的想法已经用完了,我开始怀疑这是否是Xamarin和MultiTriggers的一个bug。似乎没有太多的人在网上使用它们,而那些使用它们的人--我的那些人--似乎是第一组代码中最常见的方式。
<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>发布于 2020-05-12 01:47:43
正如zafar所说,在默认情况下,需要设置Entry IsEnable="False“,当所有条件都为真时,设置器使条目的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>关于多个触发器,请看一下:
https://learn.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/triggers
https://stackoverflow.com/questions/61730602
复制相似问题