привязка города к AutoSuggestBox - PullRequest
       2

привязка города к AutoSuggestBox

0 голосов
/ 21 сентября 2019

Я пытаюсь выучить MVVVM, выполняя погодное приложение, используя курс Udemy в качестве справочного пособия, Bing Maps Api и API OpenWeather.

Я пытаюсь связать город с текстом AutoSuggestBox моего xaml

Я сделал WeatherVM и привязал его к представлению, в качестве ресурса страницы я также сделал быстрый методя получаю код города и страны, где я нахожусь (используя API Bing Maps). Я вызвал метод из MainPage.cs, только чтобы посмотреть, работает ли он, и работает ли он нормально. Я получаю код города и страны, как и ожидалось.

WeatherVM


        public OpenWeather OpenWeather { get; set; }

        private Task<string> _city;

        public Task<string> city {
            get { return _city; }
            set {
                _city = value;
                GetLocationData();
            }
        }

        public WeatherVM() {
            OpenWeather = new OpenWeather();
        }

        private async void GetLocationData() {
            var cityData = await MapLocator.GetCityData();
        }
    }
}

MainPage.xaml

    x:Class="MVVM_Example.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:MVVM_Example"
    xmlns:vm="using:MVVM_Example.ViewModel"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

    <Page.Resources>
        <vm:WeatherVM x:Key="vm" />
    </Page.Resources>


    <Grid DataContext="{StaticResource vm}">
        <AutoSuggestBox Margin="40" QueryIcon="Find"
                        PlaceholderText="Search" 
                        Text="{Binding Source={StaticResource vm}, Path=city, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
    </Grid>
</Page>

Я ожидаю, что "Орландо" появится в моем AutoSuggestBox

1 Ответ

0 голосов
/ 23 сентября 2019

Когда вы используете Binding, вам нужно установить DataContext страницы как экземпляр вашего исходного класса связывания, а не установить page.Resource.Для получения более подробной информации вы можете обратиться к этому документу .

<Page.DataContext>
    <local:WeatherVM x:Name="viewModelInDataContext"/>
</Page.DataContext>


<Grid>
    <AutoSuggestBox Margin="40" QueryIcon="Find"
                    PlaceholderText="Search" 
                    Text="{Binding Path=city, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
</Grid>

. В кодовом коде, предположим, вам нужно присвоить значение городу.

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