Xamarin.Forms如何使用MVVMLight切换页面
Xamarin.Forms How to switch pages using MVVMLight
我目前正在开发一个 Xamarin.forms 项目,使用 .NET Standard 作为代码共享策略。我尝试通过使用 MvvmLightLibsStd10 库来使用 MVVM 模式。我已经使用本教程成功设置了 MVVM 结构:
https://www.linkedin.com/pulse/build-xamarinforms-net-standard-mvvm-light-app-rafael-carvalho
我不能使用 Navigation.PushAsync(new Page());因为它只适用于代码隐藏而不适用于 ViewModel。
我已经尝试通过 VM 构造函数传递导航,就像这里描述的那样:
但是当我尝试这个方法时,在MainPage的"LoadApplication(new DemoMVVM2.App());"处发生了错误。
如何使用 MVVM Xamarin.Forms 和 MVVMLight 切换页面(基于我第一个 url 的代码)?
但我不知道如何通过 ViewModel 切换页面并保持 header 带后退按钮。
您可以将回调传递给您的 ViewModel(VM) 并在 Command
或任何调用页面(视图)中的导航代码的操作上。这样您就可以将导航代码保留在页面中,将绑定逻辑保留在 ViewModel 中。
interface NavHandler{
void navigateToSomeView();
}
public class MyPage : ContentPage,NavHandler{
public MyPage(){
BindingContext = new MyViewModel(this);
}
void navigateToSomeView(){
Navigation.PushAsync(new Page2());
}
}
public class MyViewModel{
NavHandler handler;
public MyViewModel(NavHandler handler){
this.handler = handler
}
//Your action
this.btnClicked = new Command(async()=>{
handler.navigateToSomeView()
}
}
通常在使用 MVVMLight 时,您将使用 NavigationService
。
由于 MVVMLight 中的 IOC 构建,此 class 可以构造函数注入到您的 VM 中。
有了它,您可以在您的 VM 中执行 Navigate
和 GoBack
,在当前堆栈上触发真正的导航。
您唯一可能错过的是,您需要自己为 Xamarin 表单编写一个。
但是 Laurent Bugnion(MVVMLight 的所有者)提供了一个示例:
https://github.com/lbugnion/sample-2016-vslive-crossplatform/blob/master/Flowers/Flowers.Forms/Flowers.Forms/Helpers/NavigationService.cs
我目前正在开发一个 Xamarin.forms 项目,使用 .NET Standard 作为代码共享策略。我尝试通过使用 MvvmLightLibsStd10 库来使用 MVVM 模式。我已经使用本教程成功设置了 MVVM 结构: https://www.linkedin.com/pulse/build-xamarinforms-net-standard-mvvm-light-app-rafael-carvalho
我不能使用 Navigation.PushAsync(new Page());因为它只适用于代码隐藏而不适用于 ViewModel。
我已经尝试通过 VM 构造函数传递导航,就像这里描述的那样:
但是当我尝试这个方法时,在MainPage的"LoadApplication(new DemoMVVM2.App());"处发生了错误。
如何使用 MVVM Xamarin.Forms 和 MVVMLight 切换页面(基于我第一个 url 的代码)?
但我不知道如何通过 ViewModel 切换页面并保持 header 带后退按钮。
您可以将回调传递给您的 ViewModel(VM) 并在 Command
或任何调用页面(视图)中的导航代码的操作上。这样您就可以将导航代码保留在页面中,将绑定逻辑保留在 ViewModel 中。
interface NavHandler{
void navigateToSomeView();
}
public class MyPage : ContentPage,NavHandler{
public MyPage(){
BindingContext = new MyViewModel(this);
}
void navigateToSomeView(){
Navigation.PushAsync(new Page2());
}
}
public class MyViewModel{
NavHandler handler;
public MyViewModel(NavHandler handler){
this.handler = handler
}
//Your action
this.btnClicked = new Command(async()=>{
handler.navigateToSomeView()
}
}
通常在使用 MVVMLight 时,您将使用 NavigationService
。
由于 MVVMLight 中的 IOC 构建,此 class 可以构造函数注入到您的 VM 中。
有了它,您可以在您的 VM 中执行 Navigate
和 GoBack
,在当前堆栈上触发真正的导航。
您唯一可能错过的是,您需要自己为 Xamarin 表单编写一个。 但是 Laurent Bugnion(MVVMLight 的所有者)提供了一个示例: https://github.com/lbugnion/sample-2016-vslive-crossplatform/blob/master/Flowers/Flowers.Forms/Flowers.Forms/Helpers/NavigationService.cs