Как привязать текст метки к строковому свойству в коде позади? - PullRequest
0 голосов
/ 19 марта 2020

Я просмотрел все посты об этом, которые смог найти, и ни один из них не отвечает на вопрос так, как я понимаю. Я медленно пытаюсь создать приложение, которое отслеживает жизнь для карточной игры. Прямо сейчас я просто пытаюсь отобразить общее количество жизней, чтобы затем я мог определить свои методы для двух кнопок увеличения и уменьшения, чтобы сделать свое дело. Раньше я работал с бэк-эндами, поэтому я понимаю, как заставить кнопки делать свое дело, но я не понимаю, почему моя общая строка жизни не отображается в виде текста.

вот код xml:

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
         x:Class="Notes.MainPage">
<StackLayout Margin="10,35,10,10">
    <Label 

           Text="{Binding lifeTotalString}"
           FontSize="30"
           HorizontalOptions="Center"
           FontAttributes="Bold"/>

    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>
        <Button Text="-"
                Clicked="btnDecrement" />
        <Button Grid.Column="1"
                Text="+"
                Clicked="btnIncrement"/>
    </Grid>
</StackLayout>

вот код

namespace Notes
{
public partial class MainPage : ContentPage
{
    int lifeTotal = 20;

    public MainPage()
    {
        InitializeComponent();
        string lifeTotalString = lifeTotal.ToString();
    }

    void btnDecrement(object sender, EventArgs e)
    {

    }

    void btnIncrement(object sender, EventArgs e)
    {

    }
}

}

1 Ответ

0 голосов
/ 19 марта 2020

Вы должны привязаться к BindableProperty в коде и правильно установить BindingContext:

public partial class MainPage : ContentPage
{
    int lifeTotal = 20;

    public static readonly BindableProperty lifeTotalStringProperty = BindableProperty.Create(
            nameof(lifeTotalString),
            typeof(string),
            typeof(MainPage),
            default(string));

    public string lifeTotalString
    {
        get => (string)GetValue(lifeTotalStringProperty);
        set => SetValue(lifeTotalStringProperty, value);
    }

    public MainPage()
    {
        InitializeComponent();
        lifeTotalString = lifeTotal.ToString();

        BindingContext = this;
    }

    void btnDecrement(object sender, EventArgs e)
    {
        lifeTotal--;

        lifeTotalString = lifeTotal.ToString();
    }

    void btnIncrement(object sender, EventArgs e)
    {
        lifeTotal++;

        lifeTotalString = lifeTotal.ToString();
    }
}

Привязки данных связывают свойства двух объектов, называемых источником и целью. В коде необходимо выполнить два шага: свойство BindingContext целевого объекта должно быть установлено для исходного объекта, а метод SetBinding (часто используемый в сочетании с классом Binding) должен быть вызван для целевого объекта для привязки свойства этого объекта. объект к свойству исходного объекта.

Целевое свойство должно быть привязываемым свойством, что означает, что целевой объект должен быть производным от BindableObject.

Вы можете прочитать документ для более подробная информация: привязки данных и Свойства привязки Xamarin.Forms

...