Проблема с привязкой всплывающего окна MVVM Xamarin Community Toolkit

Попытка использовать всплывающие окна Xamarin Community Toolkit в проекте шаблона Xamarin Forms MVVM, на целевых платформах IOS и Android. Появляются всплывающие окна, однако я не могу выполнить привязку для отображения строки PopUpMessage из модели просмотра. Вот мой код.

XAML:

      <xct:Popup.BindingContext>
    <viewmodels:ProviderApplicationViewModel />
</xct:Popup.BindingContext>

<StackLayout Style="{StaticResource PopupLayout}">
    <Label Style="{StaticResource Title}" 
            Text="Application Status" />
    <BoxView Style="{StaticResource Divider}" />
    <Label Style="{StaticResource Content}" 
            Text="{Binding PopUpMessage}"
           TextColor="Black"/>
    <Button Text="OKAY"
            Style="{StaticResource ConfirmButton}"
            Clicked="Button_Clicked" />
</StackLayout>

Код позади:

          public partial class ProviderApplicationPopup : Popup
{
    public ProviderApplicationPopup()
    {
        InitializeComponent();
    }

    void Button_Clicked(object sender, System.EventArgs e) => Dismiss(null);
}

ViewModel:

          private string popupmessage;
    public string PopUpMessage { set { SetProperty(ref popupmessage, value); } get { return popupmessage; } }

Всплывающая навигация ViewModel:

         if (response == "True")
        {
            PopUpMessage = "Your application has been submitted!";
            Navigation.ShowPopup(new ProviderApplicationPopup());
            IsBusy = false;
            return;
        }

Отсутствующий текст

1 ответ

Решение

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

Сначала вы устанавливаете значение, затем вы создаете экземпляр, но затем, вероятно, также создаете экземпляр новой ViewModel с нулевым значением PopupMessage значение.

Таким образом, вы можете передать строку напрямую при создании экземпляра, например new ProviderApplicationPopup("Your application has been submitted!") затем установите значение в конструкторе

PS: Или вы также можете сначала создать экземпляр ViewModel, а затем передать его в ProviderApplicationPopup а затем свяжите его.

Редактировать:

      var viewModel = new ProviderApplicationViewModel()
{
    PopUpMessage = "Your application has been submitted!";
}
Navigation.ShowPopup(new ProviderApplicationPopup(viewModel));

//------------- In ProviderApplicationPopup -------------

public ProviderApplicationPopup(ProviderApplicationViewModel viewModel)
{
    BindingContext = viewModel;
}
Другие вопросы по тегам