Xamarin Forms 中的条件文本
Conditional text in Xamarin Forms
如何在 Xamarin Forms 5 中有条件地呈现特定文本?
例如,我从我的 API 后端获取供应商的一些数据,数据库中可能有或没有该供应商的地址。
如果我有供应商的地址,我想显示它,如果我没有地址,我想显示类似“n/a”的内容。
有没有办法在 XAML 页面中处理这个问题,还是我必须在代码后面处理它?
更新:
phone 号码 ListView
的 XAML 页面如下所示:
<Grid Grid.Row="1" Grid.Column="0" RowDefinitions="150, *" ColumnDefinitions="250, 250">
<StackLayout
Grid.Row="0"
Grid.Column="0"
Padding="10">
<ListView
BackgroundColor="Transparent"
SeparatorVisibility="None"
ItemsSource="{Binding Contact.PhoneNumbers, TargetNullValue='n/a'}">
<ListView.Header>
<StackLayout>
<Label Text="Phone Number(s)"
FontAttributes="Bold"/>
</StackLayout>
</ListView.Header>
<ListView.ItemTemplate>
<DataTemplate>
<TextCell Text="{Binding PhoneNumberDisplay}" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
</Grid>
您可以使用 xaml 绑定 TargetNullValue
<Label Text="{Binding Location, TargetNullValue='n/a'}"/>
如果您没有地址,您的 API 或您的代码应将 Location
设置为 null 以使 TargetNullValue 起作用。
更新(回复)。
在 ItemTemplate 内的绑定中使用 TargetNullValue
(应用于每个单个元素)而不是在 itemsource 绑定中:
<Grid Grid.Row="1" Grid.Column="0" RowDefinitions="150, *" ColumnDefinitions="250, 250">
<StackLayout
Grid.Row="0"
Grid.Column="0"
Padding="10">
<ListView
BackgroundColor="Transparent"
SeparatorVisibility="None"
ItemsSource="{Binding Contact.PhoneNumbers}">
<ListView.Header>
<StackLayout>
<Label Text="Phone Number(s)"
FontAttributes="Bold"/>
</StackLayout>
</ListView.Header>
<ListView.ItemTemplate>
<DataTemplate>
<TextCell Text="{Binding PhoneNumberDisplay, TargetNullValue='n/a'}" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
</Grid>
如何在 Xamarin Forms 5 中有条件地呈现特定文本?
例如,我从我的 API 后端获取供应商的一些数据,数据库中可能有或没有该供应商的地址。
如果我有供应商的地址,我想显示它,如果我没有地址,我想显示类似“n/a”的内容。
有没有办法在 XAML 页面中处理这个问题,还是我必须在代码后面处理它?
更新:
phone 号码 ListView
的 XAML 页面如下所示:
<Grid Grid.Row="1" Grid.Column="0" RowDefinitions="150, *" ColumnDefinitions="250, 250">
<StackLayout
Grid.Row="0"
Grid.Column="0"
Padding="10">
<ListView
BackgroundColor="Transparent"
SeparatorVisibility="None"
ItemsSource="{Binding Contact.PhoneNumbers, TargetNullValue='n/a'}">
<ListView.Header>
<StackLayout>
<Label Text="Phone Number(s)"
FontAttributes="Bold"/>
</StackLayout>
</ListView.Header>
<ListView.ItemTemplate>
<DataTemplate>
<TextCell Text="{Binding PhoneNumberDisplay}" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
</Grid>
您可以使用 xaml 绑定 TargetNullValue
<Label Text="{Binding Location, TargetNullValue='n/a'}"/>
如果您没有地址,您的 API 或您的代码应将 Location
设置为 null 以使 TargetNullValue 起作用。
更新(回复
在 ItemTemplate 内的绑定中使用 TargetNullValue
(应用于每个单个元素)而不是在 itemsource 绑定中:
<Grid Grid.Row="1" Grid.Column="0" RowDefinitions="150, *" ColumnDefinitions="250, 250">
<StackLayout
Grid.Row="0"
Grid.Column="0"
Padding="10">
<ListView
BackgroundColor="Transparent"
SeparatorVisibility="None"
ItemsSource="{Binding Contact.PhoneNumbers}">
<ListView.Header>
<StackLayout>
<Label Text="Phone Number(s)"
FontAttributes="Bold"/>
</StackLayout>
</ListView.Header>
<ListView.ItemTemplate>
<DataTemplate>
<TextCell Text="{Binding PhoneNumberDisplay, TargetNullValue='n/a'}" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
</Grid>