【问题标题】:Is it okay to have a MessageCenter Subscribe in a page constructor?在页面构造函数中有一个 MessageCenter 订阅可以吗?
【发布时间】:2018-11-08 07:46:46
【问题描述】:

我在页面构造函数中订阅MessageCenter 消息,因为我希望它在页面出现之前更改页面:

    public PhrasesFrame()
    {
        InitializeComponent();
        vm = new PhrasesFrameViewModel();
        BindingContext = vm;
        vm.Theme = Settings.th.ToString();
        MessagingCenter.Subscribe<SettingsPage>(this, "ThemeChanged", (sender) => {
            vm.Theme = Settings.th.ToString();
        });
    }

PhrasesFrame 仅在我的应用程序中创建一次,因为它是选项卡之一。

在这里订阅有什么问题吗?我问的原因是我不会取消订阅,或者至少我不知道在哪里放一个。

【问题讨论】:

标签: xamarin xamarin.forms


【解决方案1】:

您基本上已经回答了自己的问题。当然,您可以在此处订阅。但是您需要在页面/应用程序的生命周期中找到一个点来取消订阅。否则,这个页面可能永远存在,内存泄漏,而这不是你想要的。

按照 cmets 中的建议,更好的选择可能是在它出现时订阅并在它消失时取消订阅。有什么理由不这样做吗?

你也可以在构造函数中订阅,在消失时取消订阅,但是如果页面只实例化一次,那么订阅事件就不会再发生了。

长答案短;您将要退订。因此,只要您可以覆盖它并使其符合您的要求,在您的构造函数中订阅就可以了。

【讨论】:

    猜你喜欢
    • 2012-11-26
    • 2011-04-08
    • 1970-01-01
    • 1970-01-01
    • 2021-12-19
    • 2010-09-23
    • 2021-10-13
    相关资源
    最近更新 更多