Android 将数据从ViewModel发送到ViewModel并显示在ViewPage上
我有两种观点,咖啡和Doppio咖啡(可能是任何咖啡)。CoffeeView是一个可用咖啡的列表,当一杯咖啡录制完毕后,它将打开其详细信息页面(在本例中,Doppio点击)。 我有两个视图模型,分别是coffeeviewmodel和CoffeeDetailsViewModel 我可以实现这个场景,但不能MVVMify它。我知道路线。我可以在布线上传递变量,但不能在ViewModels之间传递。见下图。当我点击咖啡上的特定项目时,我希望它将其数据从CoffeeViewModel发送到其CoffeetTailsViewModel,同时打开其DetailsViewPage并在该页面上显示数据 或 我使用了上面的路由语法,但是它可以将数据发布到CoffeeDetails.XAML.cs,而不是发布到它的ViewModel,并且当我想将数据发送到它的ViewModel时,它不会启动它的页面 更新 ViewModels使用以下语法在Xaml中实例化Android 将数据从ViewModel发送到ViewModel并显示在ViewPage上,android,shell,xamarin.forms,mvvm,data-binding,Android,Shell,Xamarin.forms,Mvvm,Data Binding,我有两种观点,咖啡和Doppio咖啡(可能是任何咖啡)。CoffeeView是一个可用咖啡的列表,当一杯咖啡录制完毕后,它将打开其详细信息页面(在本例中,Doppio点击)。 我有两个视图模型,分别是coffeeviewmodel和CoffeeDetailsViewModel 我可以实现这个场景,但不能MVVMify它。我知道路线。我可以在布线上传递变量,但不能在ViewModels之间传递。见下图。当我点击咖啡上的特定项目时,我希望它将其数据从CoffeeViewModel发送到其Coffee
<ContentPage.BindingContext>
<ViewModel:CoffeeViewModel></ViewModel:CoffeeViewModel>
</ContentPage.BindingContext>
如果在构造函数中分配VM,则可以轻松地向其传递参数
public CoffeeDetailsPage(Family family)
{
InitializeComponent();
BindingContext = new CoffeeViewModel(family);
}
CoffeeDetailsPage
应使用该参数创建其虚拟机。或者还有其他支持直接在虚拟机之间导航的MVVM框架。@Jason您能解释一下如何使用该参数创建ViewModel吗?在第一个示例中,您将系列
传递到CoffeedTailsPage
,因此,当CoffeeDetailsPage
创建它的VM时,它可以通过VM构造函数传递family
。对我来说,这是一个相当典型的模式use@Jason但是这会将系列
变量传递到CoffeDetailsPage.Xaml.cs
而不是它的ViewModel
。为该页面创建的VM在哪里?此解决方案还有另一个问题。CoffeeViewModel根据传递到此ViewModel的族变量从Firebase下载数据,我在那里使用了异步方法。问题在于InitializeComponent()因为它在加载数据之前执行并引发异常<代码>对象引用未设置为对象的实例…
InitializeComponent
仅初始化XAML。它不应该依赖于其他任何东西。您需要找出异常的根本原因并加以解决,而不仅仅是假设是什么导致了异常
<ContentPage.BindingContext>
<ViewModel:CoffeeViewModel></ViewModel:CoffeeViewModel>
</ContentPage.BindingContext>
public CoffeeDetailsPage(Family family)
{
InitializeComponent();
BindingContext = new CoffeeViewModel(family);
}