2016-10-26 2 views
0

부분적인 CarouselLayout으로 앱을 만들었습니다.Xamarin Forms PCL - Navbar Title 동적으로 업데이트되지 않습니다.

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"); 
} 
: 나는 MessageCenter

 MessagingCenter.Send<CarouselLayout, string>(this, "ContentChanged", "123"); 

와 내가 그것을 듣고있어 내 RootPage에 메시지를 보낼 수있어, 다음 내가 제목을 업데이트 할 contentChanged 레이아웃에서

디버그 출력과 제목에서 새 날짜로 업데이트된다는 것을 알 수 있습니다. 그러나 실제 탐색 모음 제목은 절대로 업데이트되지 않습니다.

그러나 초기로드시 설정됩니다.

무엇이 잘못 되었나요?

+0

여러 플랫폼에서 사용해 보셨습니까? 'RootPage'는 어떤 타입입니까? James Montemagno가 [Evolve app] (https://github.com/xamarinhq/app-evolve/blob/master/src/XamarinEvolve.Clients.UI/Pages/Speakers)에서 땀을 흘리지 않고 해낸 것 같아서 작동합니다. /SpeakerDetailsPage.xaml.cs) –

+0

Device.BeginInvokeOnMainThread를 사용하여 구현했으며 그 작업은 나쁜 습관입니까? 내 루트 페이지는 ContentPage입니다. –

+0

아! 그건 나쁜 습관이 아닙니다. UI의 무언가를 갈 방법 인 다른 스레드에서 업데이트하고 싶다면 : –

답변

1

직접 논의하고 발견 한대로 Device.BeginInvokeOnMainThread을 사용하여이를 호출해야합니다.

MessagingCenter는 다른 스레드를 사용하며 UI 스레드를 랩핑해야하므로 UI를 업데이트 할 수 없습니다.

은 다음과 같이 표시됩니다

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

는 정확히 here 무엇을 읽기 최대.

+1

정확히, 나는 당신을 이길지라도 받아 들일 것입니다 :) 확인해 주셔서 감사합니다. –

+0

하 감사합니다! 제 의도가 아니 었습니다. 보관 목적으로 그것을 완성하겠다고 생각했습니다. –

관련 문제