Xamarin 社区工具包弹出 MVVM 绑定问题
Posted
技术标签:
【中文标题】Xamarin 社区工具包弹出 MVVM 绑定问题【英文标题】:Xamarin Community Toolkit Popup MVVM Binding Issue 【发布时间】:2021-08-04 21:05:10 【问题描述】:尝试在 Xamarin Forms MVVM 模式项目中使用 Xamarin Community Toolkit Popups,目标平台 ios 和 android。弹出窗口正在出现,但是我无法绑定以显示来自 viewmodel 的 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);
视图模型:
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;
Missing Text
【问题讨论】:
【参考方案1】:在我看到其余代码之前我无法判断,但我认为问题在于您如何实例化您的 ProviderApplicationPopup
。
首先您设置PopupMessage
值,然后您实例化ProviderApplicationPopup
,但随后ProviderApplicationPopup
也可能实例化具有空PopupMessage
值的新ViewModel。
所以你可以在实例化ProviderApplicationPopup
时直接传递字符串,比如
new ProviderApplicationPopup("Your application has been submitted!")
然后在构造函数中设置值
P.S: 或者你也可以先实例化 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;
【讨论】:
做了同样的事情,适用于Android,但不适用于iOS以上是关于Xamarin 社区工具包弹出 MVVM 绑定问题的主要内容,如果未能解决你的问题,请参考以下文章
Xamarin 形成 MVVM Stacklayout 内容绑定
Xamarin.Forms:如何避免在 MVVM 绑定中硬编码字符串
将 Picker ItemSource 绑定到 List<string> 不起作用 Xamarin.forms MVVM