【问题标题】:xamarin forms - Binding text to a label in xaml - can I cut out the end of the text?xamarin forms - 将文本绑定到 xaml 中的标签 - 我可以剪掉文本的结尾吗?
【发布时间】:2021-07-31 05:51:03
【问题描述】:

晚上好,

有一个标签...

  <Label Grid.Column="1"
                           HorizontalOptions="Center"
                           VerticalOptions="Center"
                           Text="{Binding Email}"/>

是的,这很好用...但是它会显示完整的电子邮件...

JohnnyRambo@JR.com, MovesLikeJagger@MJ.com, HugsForFree@HF.com

Q 我可以从 xaml 页面中删除域名吗?输出...

约翰尼兰博, 动作像贾格尔, 免费拥抱

感谢任何回复

【问题讨论】:

  • 将只读的EmailDisplay 属性添加到您的模型,或使用 XAML 中的 IValueConverter 来完成
  • 好酷。塔杰森

标签: xaml xamarin xamarin.forms label


【解决方案1】:

按照 Jason 的意见,您可以使用Xamarin.Forms Binding Value Converters 删除域名。我做了一个样本,你可以看看:

首先,创建一个显示 Eamil 或其他信息的模型类。

public class persominfo
{
    public string Name { get; set; }
    public string Email { get; set; }
}

public partial class Page34 : ContentPage
{
    public ObservableCollection<persominfo> persons { get; set; }
    public Page34()
    {
        InitializeComponent();

        persons = new ObservableCollection<persominfo>()
        {
            new persominfo(){Name="JR",Email="JohnnyRambo@JR.com"},
            new persominfo(){Name="MJ",Email="MovesLikeJagger@MJ.com"},
            new persominfo(){Name="HF",Email="HugsForFree@HF.com"}
        };
        this.BindingContext = this;
    }
}

然后我使用 ListView 显示这些信息,使用数据绑定将任何 Eamil 属性转换为您想要的字符串。

<ContentPage
x:Class="FormsSample.simplecontrol.Page34"
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:converter="clr-namespace:FormsSample.converter">
<ContentPage.Resources>
    <converter:EmailConverter x:Key="converter1" />
</ContentPage.Resources>
<ContentPage.Content>
    <StackLayout>

        <ListView ItemsSource="{Binding persons}">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <StackLayout Orientation="Horizontal">
                            <Label Text="{Binding Name}" />
                            <Label
                                HorizontalOptions="CenterAndExpand"
                                Text="{Binding Email, Converter={StaticResource converter1}}"
                                VerticalOptions="CenterAndExpand" />
                        </StackLayout>
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
        <Label
            HorizontalOptions="CenterAndExpand"
            Text="{Binding Email}"
            VerticalOptions="CenterAndExpand" />
    </StackLayout>
</ContentPage.Content>

这是 EmailConverter ,值转换器类可以有属性和泛型参数

 public class EmailConverter : IValueConverter
{      
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        string  emaildisplay = (string)value;
        string[] words = emaildisplay.Split('@');
        if(words[0]!=null)
        {
            return words[0];
        }
        return null;
       
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

【讨论】:

  • 啊,好酷。谢谢樱桃卜的回复
【解决方案2】:

扩展@Jason 的评论:

public string PartialEmail {
    get {
        s = ... write code here to get substring you want ...
        return s;
    }
}

然后在 XAML 中:

Text="{Binding PartialEmail}"    

换句话说,由你来编写一个具有你想要显示的值的属性。

一般来说,最好让 UI (XAML) 只关注 UI;任何值的计算或操作都应在代码 (cs) 中。

【讨论】:

    猜你喜欢
    • 2016-12-30
    • 1970-01-01
    • 2019-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-23
    • 2017-05-17
    相关资源
    最近更新 更多