Xamarin Forms PCL - Navbar Title不会动态更新

时间:2016-10-26 11:18:48

标签: xamarin xamarin.forms

我使用部分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");
}

我可以在调试输出和标题上看到,它是用新日期更新的。但是,实际的导航栏标题永远不会更新。

但它是在初始加载时设置的。

我错了什么?

1 个答案:

答案 0 :(得分:1)

正如您自己讨论和发现的那样,您应该使用Device.BeginInvokeOnMainThread来调用它。

MessagingCenter将使用另一个线程,无法更新UI,因此您必须将其包装在UI线程上。

看起来像这样:

MessagingCenter.Subscribe<CarouselLayout, string>(this, "ContentChanged", (sender, arg) =>
{
   Device.BeginInvokeOnMainThread ( () => {
      Debug.WriteLine("ContentChanged rootpage subscribe");
      UpdateDateTitle();
   });
});

详细了解它的作用here