Проблема с привязкой всплывающего окна 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;
}