Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 将数据从ViewModel发送到ViewModel并显示在ViewPage上_Android_Shell_Xamarin.forms_Mvvm_Data Binding - Fatal编程技术网

Android 将数据从ViewModel发送到ViewModel并显示在ViewPage上

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

我有两种观点,咖啡和Doppio咖啡(可能是任何咖啡)。CoffeeView是一个可用咖啡的列表,当一杯咖啡录制完毕后,它将打开其详细信息页面(在本例中,Doppio点击)。 我有两个视图模型,分别是coffeeviewmodel和CoffeeDetailsViewModel

我可以实现这个场景,但不能MVVMify它。我知道路线。我可以在布线上传递变量,但不能在ViewModels之间传递。见下图。当我点击咖啡上的特定项目时,我希望它将其数据从CoffeeViewModel发送到其CoffeetTailsViewModel,同时打开其DetailsViewPage并在该页面上显示数据

我使用了上面的路由语法,但是它可以将数据发布到CoffeeDetails.XAML.cs,而不是发布到它的ViewModel,并且当我想将数据发送到它的ViewModel时,它不会启动它的页面

更新

ViewModels使用以下语法在Xaml中实例化

 <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);
}