如何在Xamarin.Forms中连接字符串?

时间:2016-07-05 08:54:53

标签: xaml xamarin xamarin.forms

我希望我的两个字符串只能在一行上显示。它是否有可能显示如下:

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>

5 个答案:

答案 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)

您可以使用IValueConverterEmployee接受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>

Xamarin.Forms Label

此外,您还可以添加Style来避免代码中TextColorFontSize和其他属性的代码重复。

Styling Xamarin.Forms Apps using XAML Styles