Xamarin.forms ViewModel事件多次激发

Xamarin.forms ViewModel事件多次激发,xamarin.forms,mvvm-light,Xamarin.forms,Mvvm Light,我将MVVM Light用于我的应用程序,并且我还实现了用于返回/用于页面之间的INavigationService 所以在一个常见的场景中,是这样的 主页>类别>轮次>数据页 在DataPage中,我请求获取结果,并根据回调返回的结果调用.GoBack()方法从堆栈中弹出当前页面并返回到Rounds 我注意到,如果我首先点击DataPage,调用.GoBack(),然后点击另一轮,回调方法将被触发两次,如果我返回并再次进入三次,并继续这样做 从本质上说,这意味着将再次调用.GoBack(),并

我将MVVM Light用于我的应用程序,并且我还实现了用于返回/用于页面之间的INavigationService

所以在一个常见的场景中,是这样的

主页>类别>轮次>数据页

在DataPage中,我请求获取结果,并根据回调返回的结果调用.GoBack()方法从堆栈中弹出当前页面并返回到Rounds

我注意到,如果我首先点击DataPage,调用.GoBack(),然后点击另一轮,回调方法将被触发两次,如果我返回并再次进入三次,并继续这样做

从本质上说,这意味着将再次调用.GoBack(),并且导航会出错

我相信这与没有清理以前的VM有关,我尝试使用SimpleIOC中的UnRegister/Register类来更改此行为,但没有成功。

在ViewModel类中

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设置是否忽略事件的标志(如果您甚至需要忽略它)