【问题标题】:Xamarin Community Toolkit Popup MVVM Binding IssueXamarin 社区工具包弹出 MVVM 绑定问题
【发布时间】: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

【问题讨论】:

    标签: c# xamarin xamarin.forms mvvm xamarin-community-toolkit


    【解决方案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
    猜你喜欢
    • 2021-10-12
    • 2021-09-21
    • 1970-01-01
    • 2021-10-08
    • 2021-05-06
    • 1970-01-01
    • 2018-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多