我希望我的两个字符串只能在一行上显示。它是否有可能显示如下:
Curry Stephen
使用此代码
Text =“{绑定EMP_LAST_NAME + EMP_FIRST_NAME}”? ? ?
我目前有这个代码。非常感谢。
<ListView ItemsSource="{Binding EmployeesList}"
HasUnevenRows="True">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Grid Padding="10" RowSpacing="10" ColumnSpacing="5">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<controls:CircleImage Source="icon.png"
HeightRequest="66"
HorizontalOptions="CenterAndExpand"
Aspect="AspectFill"
WidthRequest="66"
Grid.RowSpan="2"
/>
<Label Grid.Column="1"
Grid.Row="1"
Text="{Binding EMP_LAST_NAME}"
TextColor="White"
FontSize="18"
Opacity="0.6"/>
<Label Grid.Column="1"
Grid.Row="1"
Text="{Binding EMP_FIRST_NAME}"
TextColor="White"
FontSize="18"
Opacity="0.6"/>
</Grid>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
答案 0 :(得分:11)
您无法绑定View
Element
上的多个媒体资源。
在这种情况下,您应该创建一个新属性,该属性可以使用您想要的格式并将其绑定到View
。
示例:
public class EmployeeViewModel
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string FullName => $"{FirstName} {LastName}";
}
然后在XAML
:
<Label Text="{Binding FullName}"/>
另一种方法:
根据评论中的建议,我们还可以在FormattedText
中使用Label
属性:
<Label.FormattedText>
<FormattedString>
<Span Text="{Binding FirstName}" />
<Span Text="{Binding LastName}"/>
</FormattedString>
</Label.FormattedText>
答案 1 :(得分:4)
您可以使用IValueConverter
,Employee
接受Label
并返回全名。
或者您可以使用MultiComponentLabel。它允许您将几个不同的值绑定到一个<?xml version="1.0" encoding="utf-8" ?>
<ContentPage x:Name="Page"
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:controls="clr-namespace:SuperForms.Controls;assembly=SuperForms.Controls"
x:Class="SuperForms.Samples.MultiComponentLabelPage">
<controls:MultiComponentLabel Margin="0,20,0,0">
<controls:MultiComponentLabel.Components>
<controls:TextComponent Text="{Binding EMP_LAST_NAME}"/>
<controls:TextComponent Text="{Binding EMP_FIRST_NAME}"/>
</controls:MultiComponentLabel.Components>
</controls:MultiComponentLabel>
</ContentPage>
。
MultiComponentLabel
只需使用Label
代替成对ListView
s
适用于您的<ListView ItemsSource="{Binding EmployeesList}"
HasUnevenRows="True">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Grid Padding="10" RowSpacing="10" ColumnSpacing="5">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<controls:CircleImage Source="icon.png"
HeightRequest="66"
HorizontalOptions="CenterAndExpand"
Aspect="AspectFill"
WidthRequest="66"
Grid.RowSpan="2" />
<controls:MultiComponentLabel Grid.Row="1" Grid.Column="1">
<controls:MultiComponentLabel.Components>
<controls:TextComponent Text="{Binding EMP_LAST_NAME}"/>
<controls:TextComponent Text="{Binding EMP_FIRST_NAME}"/>
</controls:MultiComponentLabel.Components>
</controls:MultiComponentLabel>
</Grid>
</ViewCell>
!/build
/build/*
!/build/outputs
/build/outputs/*
!/build/outputs
/build/outputs/mapping/*
!/build/outputs/mapping
/build/outputs/mapping/my_flavor/*
!/build/outputs/mapping/my_flavor
/build/outputs/mapping/my_flavor/release/*
!/build/outputs/mapping/my_flavor/release
!/build/outputs/mapping/my_flavor/release/mapping.txt
答案 2 :(得分:4)
<Label Text="{Binding Value, StringFormat='string before value {0:F0} string after value'}"/>
假设您的值为1234。 在这种情况下,输出将是:
值前的字符串1234值后的字符串
答案 3 :(得分:2)
Xamarin Forms 4.7 添加了对多重绑定的支持,可以像这样使用:
<Label>
<Label.Text>
<MultiBinding StringFormat="{}{0} {1}">
<Binding Path="FirstName" />
<Binding Path="LastName" />
</MultiBinding>
</Label.Text>
</Label>
在提供的示例中,“FirstName”和“LastName”是类中定义的常规视图模型属性:
public string FirstName { get; set; }
public string LastName { get; set; }
答案 4 :(得分:0)
在xamarin形式FormattedText
中使用Label
属性,如下所示:
<Label Grid.Column="1" Grid.Row="1">
<Label.FormattedText>
<FormattedString>
<Span TextColor="White" FontSize="18" Text="{Binding EMP_LAST_NAME'}"/>
<Span TextColor="White" FontSize="18" Text="{Binding EMP_FIRST_NAME}"/>
</FormattedString>
</Label.FormattedText>
</Label>
此外,您还可以添加Style
来避免代码中TextColor
,FontSize
和其他属性的代码重复。