我使用部分CarouselLayout创建了一个应用程序。
在contentChanged的布局中,我用MessageCenter发送消息
MessagingCenter.Send<CarouselLayout, string>(this, "ContentChanged", "123");
在我的RootPage中我正在听它,然后我想更新标题:
MessagingCenter.Subscribe<CarouselLayout, string>(this, "ContentChanged", (sender, arg) =>
{
Debug.WriteLine("ContentChanged rootpage subscribe");
UpdateDateTitle();
});
public void UpdateDateTitle()
{
this.Title = _viewModel.CurrentPage.RegList.First().DateTime.ToString("D");
}
我可以在调试输出和标题上看到,它是用新日期更新的。但是,实际的导航栏标题永远不会更新。
但它是在初始加载时设置的。
我错了什么?
答案 0 :(得分:1)
正如您自己讨论和发现的那样,您应该使用Device.BeginInvokeOnMainThread
来调用它。
MessagingCenter将使用另一个线程,无法更新UI,因此您必须将其包装在UI线程上。
看起来像这样:
MessagingCenter.Subscribe<CarouselLayout, string>(this, "ContentChanged", (sender, arg) =>
{
Device.BeginInvokeOnMainThread ( () => {
Debug.WriteLine("ContentChanged rootpage subscribe");
UpdateDateTitle();
});
});
详细了解它的作用here。