【发布时间】:2020-04-21 07:04:31
【问题描述】:
我有一个基于 ReactiveUI 的 xamarin 表单应用程序。视图模型继承自 ReactiveObject 和页面 xaml 的代码隐藏,它们继承/基于 ReactiveContentPage,如果是从 ReactiveMasterDetailPage 继承的 masterdetailpage。它自己的 contentpages/masterdetailpage 基于 ReactiveContent。
我想要实现的是:通过提供视图模型类型来获取视图/xamlpages。我有以下代码。但它在 _viewLocator.Resolve 处给出了一个空值...
public async Task<TViewModel> PushViewModelAsync<TViewModel>(bool animated) where TViewModel : class
{
var viewModel = DependencyInjectionService.Get<TViewModel>();
var view = _viewLocator.ResolveView(viewModel);
if (view is Page page)
{
view.ViewModel = viewModel;
await Application.Current.MainPage.Navigation.PushAsync(page, animated);
return viewModel;
}
else
{
throw new ArgumentException($"resolved view for {typeof(TViewModel)} is not a page.");
}
}
问题是这适用于普通的内容页面,但它不适用于我的 MasterDetailPage,这怎么可能?
<?xml version="1.0" encoding="utf-8" ?>
<rxui:ReactiveMasterDetailPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:d="http://xamarin.com/schemas/2014/forms/design"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
xmlns:vm="clr-namespace:DriverApp.ViewModels"
x:TypeArguments="vm:MainViewModel"
xmlns:rxui="clr-namespace:ReactiveUI.XamForms;assembly=ReactiveUI.XamForms"
xmlns:local="clr-namespace:DriverApp.Views; assembly=MasterDetailPageNavigation"
x:Class="DriverApp.Views.MainPage"
Title="Personal Organiser">
<MasterDetailPage.Master>
<local:MasterPage x:Name="masterPage" />
</MasterDetailPage.Master>
<MasterDetailPage.Detail>
<NavigationPage>
<x:Arguments>
<local:PlanningPage/>
</x:Arguments>
</NavigationPage>
</MasterDetailPage.Detail>
视图模型:
public class MainViewModel : ReactiveObject, IActivatableViewModel
{
}
我是这样注入的:
services.AddTransient<IViewFor<MainViewModel>, MainPage>();
【问题讨论】:
标签: xamarin.forms reactive-programming master-detail reactiveui