Xamarin Xaml资源样式多条件未使用默认值触发

时间:2019-06-03 08:34:45

标签: c# xaml xamarin

我的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?

1 个答案:

答案 0 :(得分:0)

我能够通过将BindingCondition直接绑定到选择器为其设置值的模型来解决此问题。

我不确定为什么可以解决此问题。