Xamarin.forms ViewModel事件多次激发
我将MVVM Light用于我的应用程序,并且我还实现了用于返回/用于页面之间的INavigationService 所以在一个常见的场景中,是这样的 主页>类别>轮次>数据页 在DataPage中,我请求获取结果,并根据回调返回的结果调用.GoBack()方法从堆栈中弹出当前页面并返回到Rounds 我注意到,如果我首先点击DataPage,调用.GoBack(),然后点击另一轮,回调方法将被触发两次,如果我返回并再次进入三次,并继续这样做 从本质上说,这意味着将再次调用.GoBack(),并且导航会出错 我相信这与没有清理以前的VM有关,我尝试使用SimpleIOC中的UnRegister/Register类来更改此行为,但没有成功。在ViewModel类中Xamarin.forms ViewModel事件多次激发,xamarin.forms,mvvm-light,Xamarin.forms,Mvvm Light,我将MVVM Light用于我的应用程序,并且我还实现了用于返回/用于页面之间的INavigationService 所以在一个常见的场景中,是这样的 主页>类别>轮次>数据页 在DataPage中,我请求获取结果,并根据回调返回的结果调用.GoBack()方法从堆栈中弹出当前页面并返回到Rounds 我注意到,如果我首先点击DataPage,调用.GoBack(),然后点击另一轮,回调方法将被触发两次,如果我返回并再次进入三次,并继续这样做 从本质上说,这意味着将再次调用.GoBack(),并
public void UnsubscribeFromCallBack()
{
this.event -= method;
}
在.xaml.cs页面中
protected override void OnDisappearing()
{
base.OnDisappearing();
PageViewModel vm = (this.BindingContext as PageViewModel);
vm.UnSubscribeFromCallback();
}
听起来你进入时正在连接事件,但离开时没有将其拔下。我将从回调中的事件中删除回调。@Slepz我正试图这样做,现在用另一种方法来做,请检查我建议的答案并告诉我您的意见。@Slepz考虑到mvvm模式,您认为它可以以更有效的方式编写吗?假设您正在重用这些视图模型和视图,在不了解更多背景的情况下,我认为这是最好的方法。或者,您可以在viewmodel构造函数中挂接事件,并在析构函数中取消挂接。然后使用OnAppearing和OnDisappearing设置是否忽略事件的标志(如果您甚至需要忽略它)