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
을 사용
아니요, 하위보기에 ViewModelocator 연결된 속성을 추가하기 만하면됩니다. 지금하고있는 방식은 VM에 서비스를 주입하는 데는 효과가 없습니다. –
'prism : ViewModelLocator.AutoWireViewModel = "True"'이 것이겠습니까? Prism에게 미안합니다. 'Register.xtl()'의'App.xaml'에 각 자식 뷰의 뷰 모델을 등록하면 자동으로 연결되지 않습니까? –
그게 다야! 아니요, RegisterTypes는 배선 작업을 수행하지 않으며 VML에 사용할 VM을 지정합니다. –