Как объединить строки в Xamarin.Форм?

Я хочу, чтобы мои две строки были воспроизведены только на одной строке. Возможно ли, чтобы он выглядел так:

Карри Стивен

используя этот код

Text= " {Binding 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>

2 ответов


вы не можете привязываться к нескольким свойствам на View Element.

в этом случае вам необходимо создать новое свойство, которое делает формат, который вы хотите и привязать его к View.

пример:

public class Employee
{
    public string FirstName { get; set; }    
    public string LastName { get; set; }    
    public string FullName => string.Format("{0} {1}", FirstName, LastName);
}

затем в XAML:

<Label Text="{Binding FullName}"/>

можно использовать IValueConverter, который будет принимать Employee и вернет полное имя.

или вы можете использовать MultiComponentLabel. Это позволяет привязать пару различных значений к одному Label.

<?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 вместо пары Labels

для ListView

<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>