【发布时间】:2021-08-01 17:12:24
【问题描述】:
我有两个 Views,Coffee 和 Doppio 咖啡(可能是任何咖啡)。 CoffeeView 是可用咖啡的列表,当一个 Coffee 被录音时,它会打开它的详细信息页面(在这个例子中,Doppio 已经点击了)。 我有两个 ViewModel,分别是 CoffeViewModel 和 CoffeeDetailsViewModel。
我可以实现这个场景,但不能 MVVMify。我知道路由。我可以在路由上传递变量,但不能在 ViewModel 之间传递。见下图。当我点击 Coffee 上的特定项目时,我希望它将其数据从 CoffeeViewModel 发送到其 CoffeeDetailsViewModel,同时打开其 DetailsViewPage 并在该页面上显示数据。
await Navigation.PushAsync(new CoffeeDetailsPage(family));
或
await Shell.Current.GoToAsync($"{nameof(CoffeeDetialsPage)}?Data={Data}");
我使用了上面的路由语法,但是它可以将数据发布到 CoffeeDetails.XAML.cs 而不是它的 ViewModel,当我想向它的 ViewModel 发送数据时,它不会启动它的页面。
更新
ViewModel 使用以下语法在 Xaml 中实例化。
<ContentPage.BindingContext>
<ViewModel:CoffeeViewModel></ViewModel:CoffeeViewModel>
</ContentPage.BindingContext>
【问题讨论】:
-
CoffeeDetailsPage应该使用该参数来创建它的虚拟机。或者还有其他支持直接在 VM 之间导航的 MVVM 框架。 -
@Jason 你能解释一下如何使用这个参数来创建 ViewModel 吗?
-
在您的第一个示例中,您将
family传递给CoffeeDetailsPage,因此当CoffeeDetailsPage创建它的VM 时,它可以通过VM 构造函数传递family。这是一个相当典型的使用模式 -
@Jason 但这会将
family变量传递给CoffeDetailsPage.Xaml.cs而不是它的ViewModel。 -
为该页面创建的虚拟机在哪里?
标签: android shell xamarin.forms mvvm data-binding