Имам TabbedPage, който показва доставките в ход и завършените доставки. Моделът и за двата изгледа е един и същ, само методът на обслужване, откъдето получаваме данните, е различен, така че бих искал да използвам повторно ViewModel.
Ще бъде ли добро решение да използвам повторно ViewModel, като предам някои навигационни данни в моя метод InitializeAsync, което ще ми позволи да реша кой метод на услугата да използвам, за да получа данните за изгледа?
Бих отменил OnCurrentPageChanged в задния код на TabbedPage View и бих инициализирал ViewModel от там
TabbedPageView.xaml.cs
protected override async void OnCurrentPageChanged()
{
base.OnCurrentPageChanged();
if (!(CurrentPage.BindingContext is TabbedPageViewModel tabbedPageViewModel)) return;
if (CurrentPage == DeliveriesInProgress)
{
await tabbedPageViewModel.InitializeAsync("DeliveriesInProgress");
}
else if (CurrentPage == FinishedDeliveries)
{
await tabbedPageViewModel.InitializeAsync("FinishedDeliveries");
}
}
TabbedPageViewModel.cs
public async Task InitializeAsync(object navigationData)
{
if (navigationData is string deliveryType)
{
if (deliveryType == "InProgress")
{
Deliveries = await _deliveryService.GetDeliveriesInProgress();
}
else if (deliveryType == "Finished")
{
Deliveries = await _deliveryService.GetFinishedDeliveries();
}
}
}
Какви биха могли да бъдат алтернативните решения?
service-calls
отViewModel Initialize
. ViewModel просто бъдете готови за показване на данни и след получаване на данни от услугата изберете кой dataModel да бъде показан. ТогаваViewModel Initialize
може да се направи предиservice-calls
или след него. Те нямат ефект между тях. - person Junior Jiang   schedule 25.01.2019