2017-12-07 31 views
0

다른보기를 구현하는 탭 페이지가 있지만 탐색 할 때 각 탭을 초기화 할 수 없습니다. 내가 한 그래서PRISM Xamarin - 탭 페이지 작업 (IActiveAware)

<TabbedPage.Children>  
    <tabPages:Page1/> 
    <tabPages:Page2/> 
    <tabPages:Page3/> 
</TabbedPage.Children> 

프리즘 문서는 현재 활성화 된 탭 페이지 알고 제안 IActiveAware을 사용하는 것이 었습니다.

public abstract class TabbedChildViewModelBase : BaseViewModel, IActiveAware, INavigationAware, IDestructible 

protected bool IsInitalized { get; set; } 

    private bool _IsActive; 
    public bool IsActive 
    { 
     get 
     { 
      return _IsActive; 
     } 
     set 
     { 
      SetProperty(ref _IsActive, value, RaiseIsActiveChanged); 
     } 
    } 

    public event EventHandler IsActiveChanged; 

    public virtual void OnNavigatingTo(NavigationParameters parameters) 
    { 

    } 

    protected virtual void RaiseIsActiveChanged() 
    { 
     IsActiveChanged?.Invoke(this, EventArgs.Empty); 
    } 
    public virtual void Destroy() 
    { 

    } 
} 

그래서 각 아이 뷰 모델은 아이 뷰 모델의 기반을 상속 :

public class Page1 : TabbedChildViewModelBase 
{ 
    public CurrentSeaServiceViewModel() 
    { 
     IsActiveChanged += HandleIsActiveTrue; 
     IsActiveChanged += HandleIsActiveFalse; 
    } 

    private void HandleIsActiveTrue(object sender, EventArgs args) 
    { 
     if (IsActive == false) 
     { 
      TestLabelOnly = "Test"; 
     } 

     // Handle Logic Here 
    } 

    private void HandleIsActiveFalse(object sender, EventArgs args) 
    { 
     if (IsActive == true) return; 

     // Handle Logic Here 
    } 

    public override void Destroy() 
    { 
     IsActiveChanged -= HandleIsActiveTrue; 
     IsActiveChanged -= HandleIsActiveFalse; 
    } 
} 

문제는, 자식 VM이 초기화되지 않고 그래서이 클래스가 있습니다. 제대로 IActiveAware을 구현하기 위해 필요한 일이나 난 아직도 당신이 자신의 뷰 모델에 페이지를 결합하는 데 필요한 childtabbedviewmodel 작품을 만들기 위해, 불행하게도 IActiveAware을 사용

답변

0

IsActive 특성을 출시 있습니다.

그래서 여기에 내가 무슨 짓을했는지 :

<TabbedPage.Children> 
     <views:ChildPage1> 
      <views:ChildPage1.BindingContext> 
       <viewModels:ChildPage1ViewModel/> 
      </views:ChildPage1.BindingContext> 
     </views:ChildPage1> 
     <views:ChildPage2> 
      <views:ChildPage2.BindingContext> 
       <viewModels:ChildPage2ViewModel/> 
      </views:ChildPage2.BindingContext> 
    </views:ChildPage2> 
</TabbedPage.Children> 

내가 내보기 BindingContext 및 가 나는 또한 현재 사용중인 무엇 탭 알 것입니다 IActiveAware를 사용하여 속성을 사용했다. 누군가가 탭의 하위 페이지를 바인딩하는 데 문제가있는 사람을 돕기를 바랍니다.

+0

아니요, 하위보기에 ViewModelocator 연결된 속성을 추가하기 만하면됩니다. 지금하고있는 방식은 VM에 서비스를 주입하는 데는 효과가 없습니다. –

+0

'prism : ViewModelLocator.AutoWireViewModel = "True"'이 것이겠습니까? Prism에게 미안합니다. 'Register.xtl()'의'App.xaml'에 각 자식 뷰의 뷰 모델을 등록하면 자동으로 연결되지 않습니까? –

+0

그게 다야! 아니요, RegisterTypes는 배선 작업을 수행하지 않으며 VML에 사용할 VM을 지정합니다. –