BindingContext всегда нулевой - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть следующее xaml-

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="MyProj.Places"
             Title="Grid Page">
    <ContentPage.Content>
        <StackLayout>

            <SearchBar x:Name="searchBar"
           Placeholder="Enter value..."
           TextChanged="Handle_TextChanged"
           SearchCommand="{Binding SearchButtonPressed}"
           SearchCommandParameter="{Binding Source={x:Reference searchBar}, Path=Text}"/>
            <Label x:Name="LabelTextPress" Text="{Binding LabelTextPress}"/>
        </StackLayout>
    </ContentPage.Content>
</ContentPage>

Тогда связанный xaml.cs -

[XamlCompilation(XamlCompilationOptions.Compile)]
    public partial class Places : ContentPage
    {
        public Places()
        {
            InitializeComponent();
        }

        void Handle_TextChanged(object sender, TextChangedEventArgs args)
        {
            var viewModel = BindingContext as Places;
            viewModel.LabelTextPress.Text = args.NewTextValue;
        }
    }

Я могу просто войти в Handle_TextChanged при использовании панели поиска, однако мой проблема в том, что я не могу обновить LabelTextPress, потому что привязка не работает.

var viewModel = BindingContext as Places; всегда пуст, где я ошибаюсь с привязкой этого?

1 Ответ

1 голос
/ 15 апреля 2020

Свойство BindingContext будет возвращать null, пока вы на самом деле не установите его на что-либо. Например, вы можете сделать это в конструкторе ContentPage:

public Places()
{
    InitializeComponent();
    BindingContext = new YourViewModel();
}

Свойство SearchButtonPressed, к которому вы привязываетесь в разметке XAML, должно быть свойством объекта (YourViewModel ) что вы устанавливаете свойство BindingContext, чтобы привязка работала.

Если вы ожидаете, что BindingContext as Places будет возвращать что-либо, кроме null, вы должны установить BindingContext в Places экземпляр Например:

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