Windows phone 8 我可以在哪里以及如何订阅ViewModel中的messenger事件?
这个问题是对我的一个问题的“第二次尝试” 我正在使用MvvmCross框架构建一个跨平台的移动应用程序, 我想使用这个插件来接收代码中其他地方发布的事件通知 我已尝试在Windows phone 8 我可以在哪里以及如何订阅ViewModel中的messenger事件?,windows-phone-8,xamarin,mvvmcross,Windows Phone 8,Xamarin,Mvvmcross,这个问题是对我的一个问题的“第二次尝试” 我正在使用MvvmCross框架构建一个跨平台的移动应用程序, 我想使用这个插件来接收代码中其他地方发布的事件通知 我已尝试在ctor中添加订阅,如下所示: public class MyViewModel : BaseViewModel, IMyViewModel { private MvxSubscriptionToken _showMsgToken; public MyViewModel () { _sho
ctor
中添加订阅,如下所示:
public class MyViewModel : BaseViewModel, IMyViewModel
{
private MvxSubscriptionToken _showMsgToken;
public MyViewModel ()
{
_showMsgToken = MvxMessenger.Subscribe<ShowMsg>(message => onShowNavigation(), MvxReference.Weak);
}
private void onShowNavigation()
{
//Do Stuff
}
}
公共类MyViewModel:BaseViewModel、IMyViewModel
{
私有MvxSubscriptionToken_showMsgToken;
公共MyViewModel()
{
_showMsgToken=MvxMessenger.Subscribe(message=>onShowNavigation(),MvxReference.弱);
}
私有void onShowNavigation()
{
//做事
}
}
现在,当我导航到此ViewModel时,一切正常,并收到通知但是,当我离开并返回此ViewModel时,我可以看到订阅正在向
MvxMessenger
subscriptions属性添加另一个条目,从而导致onShowAdsNavigation()
为每个新事件触发两次
那么,如何订阅ViewModel中的事件?
或者我需要找到一种取消订阅事件的方法?如果您需要主动取消订阅消息,那么您可以通过在视图中捕获生命周期事件,然后使用这些事件驱动viewmodel来实现这一点。这是你的代码-你可以做你喜欢的事 有关此选项的一些选项,请参见
我通常不需要主动管理订阅。相反,我依赖于这样一个事实:视图将从UI中删除,因此它及其ViewModel将在以后的某个时间从内存中删除。当这种情况发生时,我知道订阅管理将自动发生——当视图和视图模型被垃圾收集时,订阅也将在不久之后被清理。我知道Messenger中使用的弱引用将意味着订阅将自行清理 为了证明这一点,请尝试-它有一个按钮来强制GC发生
如果这对你的应用程序来说“不够好”,那么请参阅上面的“如果你需要主动…”。如果你需要主动取消订阅邮件,那么你可以通过捕获视图中的生命周期事件,然后使用这些事件驱动你的viewmodel来实现。这是你的代码-你可以做你喜欢的事情 有关此选项的一些选项,请参见
我通常不关心订阅的主动管理。相反,我依赖于这样一个事实:视图将从UI中删除,因此它和它的ViewModel将在以后的某个时间从内存中删除。当这种情况发生时,我知道订阅管理将自动发生-当视图和ViewModel变得无用时我知道,Messenger中使用的弱引用将意味着订阅将自行清理 为了证明这一点,请尝试-它有一个按钮来强制GC发生 如果这对你的应用程序来说还不够好,那么请参见上面的“如果你需要积极……”