我的Xamarin项目中有一个XAML文件,根据2个选择器视图的状态,它们显示不同的视图。 Picker View是一个自定义视图,可让您将枚举器显示为Picker。重要的是,SelectedItem确实会触发PropertyChanged通知。
所以在我的Xaml中,我的风格定义如下:
<Style x:Key="SinglePressureRelativeHumidity" TargetType="ContentView">
<Style.Triggers>
<MultiTrigger TargetType="ContentView">
<MultiTrigger.Conditions>
<BindingCondition Binding="{Binding Source={x:Reference Mode}, Path=SelectedItem}"
Value="{x:Static enums:HumidityCalculatorMode.SinglePressure}" />
<BindingCondition Binding="{Binding Source={x:Reference KnownValue}, Path=SelectedItem}"
Value="{x:Static enums:HumidityCalculatorKnownValue.RelativeHumidity}" />
</MultiTrigger.Conditions>
<MultiTrigger.Setters>
<Setter Property="IsVisible" Value="true" />
</MultiTrigger.Setters>
</MultiTrigger>
</Style.Triggers>
</Style>
这放置在本地资源字典中。引用模式和KnownValue引用自定义选择器视图,这些视图在同一xaml文件中正确定义。
后来我有了一个StackLayout,其中包含多个ContentPage,每个ContentPage与以下内容相似:
<ContentView Style="{StaticResource SinglePressureRelativeHumidity}"
IsVisible="False">
<StackLayout>
<controls:TemperatureEntry Title="Temperature"
Temperature="{Binding HumidityCalculator.InputTemperature, Mode=TwoWay}"/>
<controls:PressureEntry Title="Test Pressure"
Pressure="{Binding HumidityCalculator.InputPressure, Mode=TwoWay}" />
</StackLayout>
</ContentView>
每个ContentPage在不同条件下都有自己的样式。
由于该问题,当我更改任何选择器的值时,如您所愿,将启用或禁用ContentPages,将满足样式的MultiTrigger条件的控件设置为可见,其他所有控件均设置为不可见。
但是,问题在于,在加载视图时,所有视图都设置为不可见。因此,好像触发器仅检查用户何时进行了更改。我已经测试了各种东西。
首先,我尝试在InitializeComponent
方法之后将两个选择器的值都设置为所需的默认值,但没有成功。我确保属性SelectedItem
确实触发了具有正确名称的PropertyChanged通知。
第二,我尝试将ContentViews的isVisible
属性反转为true,但随后所有可见的内容都不是我想要的。
那么如何使用默认值触发MultiTrigger?
答案 0 :(得分:0)
我能够通过将BindingCondition
直接绑定到选择器为其设置值的模型来解决此问题。
我不确定为什么可以解决此问题。