Xamarin绑定默认值xaml

ben*_*ton 5 xaml android xamarin xamarin.forms

我默认IsVisible将对象的属性Xaml设置为false。但是,当我打开页面时,它是可见的,然后对绑定变量进行求值,如果是false,它将变为不可见。我希望它在默认情况下不可见,并且如果绑定变量为true,则它应该变为可见。我试图在我IsVisible的对象属性的绑定中插入默认值。我已经尝试FallbackValue = HiddenFallbackValue = Collapsed更多,甚至是TargetNullValue,但它不起作用。我总是得到一个XamlParseException

谁能帮我吗?谢谢。

代码(简体):

 <Grid HorizontalOptions="FillAndExpand"
       IsVisible="{Binding Path=Info.IsVisible, Converter={StaticResource BooleanToStringConverter}, FallbackValue=Collapsed}"
Run Code Online (Sandbox Code Playgroud)

tes*_*ing 4

对象的默认值IsVisible始终是true。这是独立于Binding. 您可以使用以下内容覆盖代码隐藏文件中的该值:

<Image x:Name="myImage" Aspect="AspectFit" WidthRequest="20" 
       HeightRequest="20" HorizontalOptions="End" VerticalOptions="End" 
       IsVisible="{Binding PropertyNameOfYourModel}" />
Run Code Online (Sandbox Code Playgroud)
// Somewhere in the constructor
this.myImage.IsVisible = false;

// Here the binding is set at a later time
this.BindingContext = yourModelObject;
this.myImage.SetBinding(Image.IsVisibleProperty, "PropertyNameOfYourModel");
Run Code Online (Sandbox Code Playgroud)

另一种解决方案可能是DataTrigger,但我还没有测试过:

<Label Text="{Binding MyObject.Text}" IsVisible="false">
    <Label.Triggers>
        <DataTrigger TargetType="Label" Binding="{Binding MyObject.Text, Converter={StaticResource NotEmptyToBoolConverter}}" Value="True">
            <Setter Property="IsVisible" Value="True" />
        </DataTrigger>
    </Label.Triggers>
</Label>
Run Code Online (Sandbox Code Playgroud)

来源

如果您可以等待Xamarin.Forms 3.2.0FallbackValue ,那么您将可以TargetNullValue直接在 Xamarin Xaml 中使用这些选项。