XAML中基于平台的属性绑定失败

时间:2017-09-12 19:15:00

标签: c# xaml xamarin xamarin.forms

我在下面编写了XAML和C#代码,以便在Android和iOS上将IsVisible的{​​{1}}属性设置为ActivityIndicator。代码隐藏中的C#代码将相同的属性绑定到Windows上绑定上下文的True属性。此代码在所有平台上都按预期工作。

IsBusy

我希望仅使用XAML具有相同的行为。我尝试了下面没有任何工作的代码片段。

# XAML Code
<ActivityIndicator x:Name="AI" IsEnabled="{Binding Path=IsBusy}" IsVisible="True"  IsRunning="{Binding Path=IsBusy}"/>

# C# Code
if (Device.RuntimePlatform == Device.Windows)
{
    AI.SetBinding(IsVisibleProperty, new Binding(nameof(ViewModel.IsBusy)));
}

是否可以在XAML中完成此操作?

1 个答案:

答案 0 :(得分:0)

我不确定为什么BindingBase选项不起作用,但对于其他情况,很明显问题是类型不匹配。

为了解决这个问题,我猜你可以使用样式设置器提供默认值,同时使用OnPlatform覆盖它们:

//App or Page resources to set default properties 
<ResourceDictionary>
    <Style TargetType="ActivityIndicator" x:Key="AIStyle">
        <Setter Property="IsEnabled" Value="{Binding Path=IsBusy}" />
        <Setter Property="IsRunning" Value="{Binding Path=IsBusy}" />
    </Style>
</ResourceDictionary>

//And use following to define control
<OnPlatform x:TypeArguments="View">
    <On Platform="Android, iOS">
        <ActivityIndicator IsVisible="true" Style="{StaticResource AIStyle}" />
    </On>
    <On Platform="Windows">
        <ActivityIndicator IsVisible="{Binding Path=IsBusy}" Style="{StaticResource AIStyle}" />
    </On>
</OnPlatform>