如何使用xaml绑定创建If Else条件

时间:2018-10-30 00:20:14

标签: xamarin.forms

我正在尝试根据条件创建XAML UI。

<StackLayout Orientation="Horizontal">
              <!--IF WorkEmailAddress != NULL && WorkEmailAddrress != ""-->
              <!-- BEGIN IF -->
              <Label Text="{Binding WorkEmailAddress}" Style="{StaticResource labelListItem}"></Label>
              <Image HeightRequest="16" HorizontalOptions="End" VerticalOptions="Center" Source="arrow.png" Margin="0,0,15,0"></Image>
              <!-- END IF -->
              <!-- ELSE -->
              <Label Text="Add new email" Style="{StaticResource labelLinkItem}">
            </StackLayout>

请让我知道如何在XAML中添加IF ELSE条件,以便根据从后端返回的值动态创建UI。

1 个答案:

答案 0 :(得分:5)

您无法在XAML中完全做到这一点。可能最好的方法是在名为HasWorkEmailAddress的视图模型中添加bool属性(假设您有一个,即WorkEmailAddress所在的地方),如果存在,则返回true WorkEmailAddress的非空非空值。

然后,您可以将第一个标签和Image的IsVisible属性绑定到此bool。

您还可以创建一个InverseBooleanConverter,它将实现IValueConverter。 Convert方法将简单地获取布尔值并将其取反,然后返回该值。将第二个标签的IsVisible绑定到相同的bool,但是将InverseBooleanConverter指定为绑定的Converter。然后,仅当HasWorkEmailAddress返回false时才显示。标签绑定将如下所示:

<Label IsVisible="{Binding HasWorkEmailAddress, Converter={StaticResource InverseBooleanConverter}}" />

如果您不想编写自己的转换器,则FreshEssentials Nuget包中将存在一个转换器。

最后一件事;如果在显示页面时有可能更改WorkEmailAddress,则需要确保为HasWorkEmailAddress属性引发PropertyChanged事件,否则您的视图将不会适当更改。