我正在尝试根据条件创建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。
答案 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事件,否则您的视图将不会适当更改。