【发布时间】:2020-12-14 05:05:54
【问题描述】:
我有两个视图模型。第一个 SxCaseDetailViewModel 包含一个 SxCaseId 的详细信息。第二个视图模型 CaseStaffJoinViewModel 包含与 SxCaseId 相关的所有人员。我的 CaseStaffJoinViewModel 中没有任何相关数据。如何将 int SxCaseId 传递给 CaseStaffJoinViewModel 以便它显示所有相关数据?
ViewModel SxCaseDetailViewModel
公共类 SxCaseDetailViewModel : ViewModelBase {
private ISxCaseDataService _sxCaseDataService;
private ICaseStaffJoinDataService _caseStaffJoinDataService;
private SxCase _selectedSxCase;
public SxCaseDetailViewModel(IConnectionService connectionService,
INavigationService navigationService, IDialogService dialogService,
ICaseStaffJoinDataService caseStaffJoinDataService,
ISxCaseDataService sxCaseDataService)
: base(connectionService, navigationService, dialogService)
{
_sxCaseDataService = sxCaseDataService;
_caseStaffJoinDataService = caseStaffJoinDataService;
}
public SxCase SelectedSxCase
{
get => _selectedSxCase;
set
{
_selectedSxCase = value;
OnPropertyChanged();
}
}
public override async Task InitializeAsync(object navigationData)
{
IsBusy = true;
SelectedSxCase = (SxCase) navigationData;
IsBusy = false;
}
public ICommand CaseStaffJoinTappedCommand => new Command<SxCase>(OnCaseStaffJoinTapped);
private void OnCaseStaffJoinTapped(SxCase selectedSxCase)
{
_navigationService.NavigateToAsync<CaseStaffJoinViewModel>(selectedSxCase);
}
}
ViewModel CaseStaffJoinViewModel
public class CaseStaffJoinViewModel : ViewModelBase
{
private ICaseStaffJoinDataService _caseStaffJoinDataService;
private ObservableCollection<CaseStaffJoin> _caseStaffJoins;
public CaseStaffJoinViewModel(IConnectionService connectionService,
INavigationService navigationService, IDialogService dialogService,
ICaseStaffJoinDataService caseStaffJoinDataService)
: base(connectionService, navigationService, dialogService)
{
_caseStaffJoinDataService = caseStaffJoinDataService;
}
public ObservableCollection<CaseStaffJoin> CaseStaffJoins
{
get => _caseStaffJoins;
set
{
_caseStaffJoins = value;
OnPropertyChanged();
}
}
public override async Task InitializeAsync(object navigationData)
{
if (navigationData is int)
{
IsBusy = true;
// Get caseStaffJoins by id
CaseStaffJoins = (ObservableCollection<CaseStaffJoin>)
await _caseStaffJoinDataService.GetCaseStaffJoinsAsync((int) navigationData);
IsBusy = false;
}
else
{
}
}
}
数据服务
class CaseStaffJoinDataService :BaseService, ICaseStaffJoinDataService
{
HttpClient _client;
private readonly IGenericRepository _genericRepository;
public CaseStaffJoinDataService(IGenericRepository genericRepository,
IBlobCache cache = null) : base(cache)
{
_genericRepository = genericRepository;
_client = new HttpClient();
}
public async Task<ObservableCollection<CaseStaffJoin>> FilterAsync(int sxCaseId)
{
UriBuilder builder = new UriBuilder(ApiConstants.BaseApiUrl)
{
Path = $"{ApiConstants.CaseStaffsEndpoint}/{sxCaseId}"
};
IEnumerable<CaseStaffJoin> caseStaffJoins =
await _genericRepository.GetAsync<IEnumerable<CaseStaffJoin>>(builder.ToString());
return caseStaffJoins?.ToObservableCollection();
}
public async Task<CaseStaffJoin> GetCaseStaffJoinBySxCaseIdAsync(int sxCaseId)
{
UriBuilder builder = new UriBuilder(ApiConstants.BaseApiUrl)
{
Path = $"{ApiConstants.CaseStaffsEndpoint}/{sxCaseId}"
};
var caseStaffJoin = await _genericRepository.GetAsync<CaseStaffJoin>(builder.ToString());
return caseStaffJoin;
}
public async Task<IEnumerable<CaseStaffJoin>> GetCaseStaffJoinsAsync(int sxCaseId)
{
UriBuilder builder = new UriBuilder(ApiConstants.BaseApiUrl)
{
Path = $"{ApiConstants.CaseStaffsEndpoint}/{sxCaseId}"
};
var caseStaffJoins = await _genericRepository.GetAsync<List<CaseStaffJoin>>(builder.ToString());
return caseStaffJoins;
}
【问题讨论】:
标签: c# xamarin.forms