c # множественная обязательная метка со строкой и данными - PullRequest
0 голосов
/ 30 апреля 2018

Быстрый вопрос:

Как я могу связать метку с самой фиксированной строкой? Например, "ID: xxxxx". "ID:" - это фиксированная строка, а xxxx - это данные. Единственный способ сделать это - создать два ярлыка в интерфейсе пользователя.

Есть ли вообще способ сделать это с одним ярлыком?

Ответы [ 4 ]

0 голосов
/ 30 апреля 2018

Для проектов в прошлом я создал свой собственный класс меток с несколькими свойствами привязываемых значений, которые просто объединяют значения вместе.

public class MultiLabel : Label
{
    public static readonly BindableProperty Value1Property = BindableProperty.Create(nameof(Value1), typeof(string), typeof(MultiLabel), string.Empty, propertyChanged: OnValueChanged);
    public static readonly BindableProperty Value2Property = BindableProperty.Create(nameof(Value2), typeof(string), typeof(MultiLabel), string.Empty, propertyChanged: OnValueChanged);
    public static readonly BindableProperty Value3Property = BindableProperty.Create(nameof(Value3), typeof(string), typeof(MultiLabel), string.Empty, propertyChanged: OnValueChanged);
    public static readonly BindableProperty Value4Property = BindableProperty.Create(nameof(Value4), typeof(string), typeof(MultiLabel), string.Empty, propertyChanged: OnValueChanged);
    public static readonly BindableProperty Value5Property = BindableProperty.Create(nameof(Value5), typeof(string), typeof(MultiLabel), string.Empty, propertyChanged: OnValueChanged);

    public string Value1
    {
        get { return (string)GetValue(Value1Property); }
        set { SetValue(Value1Property, value); }
    }

    public string Value2
    {
        get { return (string)GetValue(Value2Property); }
        set { SetValue(Value2Property, value); }
    }

    public string Value3
    {
        get { return (string)GetValue(Value3Property); }
        set { SetValue(Value3Property, value); }
    }

    public string Value4
    {
        get { return (string)GetValue(Value4Property); }
        set { SetValue(Value4Property, value); }
    }

    public string Value5
    {
        get { return (string)GetValue(Value5Property); }
        set { SetValue(Value5Property, value); }
    }

    static void OnValueChanged(BindableObject bindable, object oldValue, object newValue)
    {
        var label = (MultiLabel)bindable;

        label.Text = label.Value1 + label.Value2 + label.Value3 + label.Value4 + label.Value5;
    }
}

и в xaml

<local:MultiLabel Value1="ID:" Value2="{Binding Id}" />

Основная причина, по которой мы это сделали, заключалась в том, чтобы уменьшить количество меток, чтобы уменьшить объем памяти, и количество значений, которые вам нужно, всегда можно изменить, просто так получилось, что максимальное значение, которое нам понадобилось, было 5.

0 голосов
/ 30 апреля 2018

Один из способов - создать новое свойство для вывода вашего пользовательского формата, например:

public string MyCustomFormatProperty{
    get {
        return string.Format("ID:{0}",  this.XXX);
    }
}

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

Другой способ - использовать конвертер: https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/data-binding/converters

0 голосов
/ 30 апреля 2018

Вы можете сделать это прямо в Xaml следующим образом:

<Label Text="{Binding Id, StringFormat='ID:{0}'}}"/>

Нет необходимости в преобразователе или другом свойстве в вашей модели представления;)

0 голосов
/ 30 апреля 2018

вы можете объединить строку с фиксированной строкой метки

Например: Lable1.Text = Lable1.Text + "xxxxxxx";

Я думаю, это то, что вам нужно из вашего вопроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...