在页面构造函数中具有MessageCenter订阅可以吗?

时间:2018-11-08 07:46:46

标签: xamarin xamarin.forms

我要在页面构造函数中订阅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是我的应用程序中的其中一个标签,仅创建了一次。

在这里订阅是否有任何问题。我问的原因是我不会取消订阅,或者至少我不知道将其放在哪里。

1 个答案:

答案 0 :(得分:1)

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

一个更好的选择可能是在出现时订阅,然后在评论消失时取消订阅。有什么理由不这样做吗?

您还可以在构造函数中进行订阅,而在消失的结构中取消订阅,但是如果页面仅被实例化一次,则订阅事件将不再发生。

长答案简短;您将要退订。因此,只要您能满足要求并使其符合您的要求,就可以订阅构造函数。