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,目标平台 iosandroid。弹出窗口正在出现,但是我无法绑定以显示来自 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 条目绑定到 MVVM

Xamarin.Forms:如何避免在 MVVM 绑定中硬编码字符串

将 Picker ItemSource 绑定到 List<string> 不起作用 Xamarin.forms MVVM

如何绑定到CarouselView(Xamarin.Forms)(MVVM)内部的ViewModel元素?

Xamarin,xaml 中的标签文本不会随着 MVVM Helpers 的属性更改而更改