Привязка Xamarin Forms не заполняется до перезагрузки - PullRequest
0 голосов
/ 19 июня 2020

У меня есть приложение Xamarin Forms, которое показывает изображение, привязанное к классу (RandomChallenge). Класс создается и назначается в модели представления. У класса есть свойство Uri, которое мы хотим привязать к изображению в представлении.

Когда приложение загружается, оно не показывает никакого изображения, даже если RandomChallenge не равно нулю. Если я внесу изменение в код пользовательского интерфейса во время отладки и сохраню его, при перезагрузке отладчика изображение станет видимым. Как будто класс RandomChallenge заполняется после рендеринга страницы? Если бы я поставил точку останова в строке RandomChallenge = await ChallengeDataStore.GetRandomChallenge (); RandomChallenge заполнен.

ViewModel

public class MainMenuViewModel : BaseViewModel
{
    public ICommand OpenWebCommand { get; }

    public IdentificationChallenge RandomChallenge { get; set; }

    public Command LoadChallengeCommand { get; set; }

    public MainMenuViewModel()
    {
        Title = "Main Menu";

        LoadChallengeCommand = new Command(async () => await ExecuteLoadChallengeCommand());

        this.LoadChallengeCommand.Execute(null);
    }

    async Task ExecuteLoadChallengeCommand()
    {
        if (IsBusy)
            return;

        try
        {
            RandomChallenge = await ChallengeDataStore.GetRandomChallenge();

            Debug.WriteLine("TEst");
        }
        catch (Exception ex)
        {
            Debug.WriteLine(ex);
        }
        finally
        {
            IsBusy = false;
        }
    }
}

UI

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
         xmlns:d="http://xamarin.com/schemas/2014/forms/design"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
 xmlns:microcharts="clr-namespace:Microcharts.Forms;assembly=Microcharts.Forms"
         mc:Ignorable="d"
         x:Class="HOG.MobileApp.Views.MainMenuPage"
         xmlns:vm="clr-namespace:HOG.MobileApp.ViewModels"
          xmlns:ffimageloading="clr-namespace:FFImageLoading.Forms;assembly=FFImageLoading.Forms"    
         Title="{Binding Title}">





<ContentPage.Resources>
    <ResourceDictionary>
        <Color x:Key="Primary">#72a230</Color>
        <Color x:Key="Accent">#72a230</Color>
        <Color x:Key="LightTextColor">#72a230</Color>
    </ResourceDictionary>
</ContentPage.Resources>

<ContentPage.ToolbarItems>
    <ToolbarItem Text="Help" />
</ContentPage.ToolbarItems>

<ContentPage.Content>
    <Image Source="{ Binding RandomChallenge.Picture }" HeightRequest="450" WidthRequest="450" />
</ContentPage.Content>

1 Ответ

1 голос
/ 19 июня 2020

Итак, ответ заключался в вызове OnPropertyChanged при назначении RandomChallenge. ViewModel действительно реализовал INotifyPropertyChanged в своем родительском классе.

async Task ExecuteLoadChallengeCommand()
    {
        if (IsBusy)
            return;

        try
        {
            RandomChallenge = await ChallengeDataStore.GetRandomChallenge();

            OnPropertyChanged("RandomChallenge");

            Debug.WriteLine("TEst");
        }
        catch (Exception ex)
        {
            Debug.WriteLine(ex);
        }
        finally
        {
            IsBusy = false;
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...