C# 如何使用Fresh.MVVM浏览Xamarin.Forms中的模式页面
当按下按钮时,我正试图使用MVVM在我的xamarin forms应用程序中按下一个模式页面。我已经知道如何使用导航堆栈,但不知道如何将内容页面作为模式页面使用,我尝试了多种方法,特别是调用PushPageModel方法 这是我最后一次尝试: 视图或页面:C# 如何使用Fresh.MVVM浏览Xamarin.Forms中的模式页面,c#,xamarin,xamarin.forms,freshmvvm,C#,Xamarin,Xamarin.forms,Freshmvvm,当按下按钮时,我正试图使用MVVM在我的xamarin forms应用程序中按下一个模式页面。我已经知道如何使用导航堆栈,但不知道如何将内容页面作为模式页面使用,我尝试了多种方法,特别是调用PushPageModel方法 这是我最后一次尝试: 视图或页面: <Label x:Name="forgottenPasswordLabel" Text="Forgot password?" TextCol
<Label
x:Name="forgottenPasswordLabel"
Text="Forgot password?"
TextColor="LightPink"
FontSize="16"
FontAttributes="Bold"
VerticalOptions="Start"
HorizontalOptions="End"
Margin="25,0,25,25">
<Label.GestureRecognizers>
<TapGestureRecognizer Command="{Binding ForgotPasswordCommand}"/>
</Label.GestureRecognizers>
</Label>
ViewModel类:
public class LogInViewModel : FreshBasePageModel
{
public ICommand ForgotPasswordCommand { get; set; }
public LogInViewModel()
{
}
public override void Init(object initData)
{
ForgotPasswordCommand = new Command (async() =>
{
var newPage = FreshPageModelResolver.ResolvePageModel<ForgottenPasswordViewModel>();
await CoreMethods.PushPageModel<ForgottenPasswordViewModel>(null, false, true);
});
}
}
公共类LogInViewModel:FreshBasePageModel
{
公共ICommand ForgotPasswordCommand{get;set;}
公共登录视图模型()
{
}
公共重写void Init(对象initData)
{
ForgotPasswordCommand=新命令(异步()=>
{
var newPage=FreshPageModelResolver.ResolvePageModel();
等待corethods.PushPageModel(null、false、true);
});
}
}
App.xaml.cs类:
public App()
{
InitializeComponent();
MainPage = FreshPageModelResolver.ResolvePageModel<LogInViewModel>();
}
public应用程序()
{
初始化组件();
MainPage=FreshPageModelResolver.ResolvePageModel();
}
此代码给出以下错误:“FreshTinyIoC.TinyIoCResolutionException:'解析失败:IFreshNavigationService”
就这些,如果您需要更多的信息,我会在看到您的请求后尽快提供,谢谢您的时间,希望您有一个美好的一天
编辑:请求堆栈跟踪:
在C中的FreshTinyIoC.FreshTinyIoCContainer.ResolveInternal(FreshTinyIoC.FreshTinyIoCContainer+类型注册,FreshTinyIoC.NamedParameters重载参数,FreshTinyIoC.ResolveOptions)[0x000f7:“路径在这里”
在C:\'中的FreshTinyIoC.FreshTinyIoCContainer.Resolve(System.Type resolveType,System.String name)[0x00000]处,路径如下
在C中的FreshTinyIoC.FreshTinyIoCContainer.Resolve[ResolveType](System.String名称)[0x00000]处:“路径在这里”
在C中的FreshMvvm.FreshTinyIOCBuiltIn.Resolve[ResolveType](System.String name)[0x00000]处:“路径在这里”
在C中的FreshMvvm.PageModelCoreMethods.PushPageModelWithPage(Xamarin.Forms.Page页面,FreshMvvm.FreshBasePageModel页面模型,系统对象数据,系统布尔模式,系统布尔动画)[0x00177:“路径在这里”
在C中的FreshMvvm.PageModelCoreMethods.PushPageModel(FreshMvvm.FreshBasePageModel pageModel,System.Object数据,System.Boolean模式,System.Boolean动画)[0x00048]:“路径在这里”
在C语言中的FreshMvvm.PageModelCoreMethods.PushPageModel[T](System.Object数据、System.Boolean模式、System.Boolean动画)[0x00040]:“路径在这里”
在D:\“路径如下”中的FirstApp.ViewModels.LogInViewModel.b_u5_0()[0x0003a]处
问题是对概念的误解,我认为内容页面和导航页面是两种不同类型的页面,如选项卡页面、主控详细页面、旋转木马页面和内容页面。所以我试图不使用以下代码,认为FreshNavigationContainer强迫我使用导航页面而不是内容页面,这是正确的,但并不完全,因为是的,它强迫你使用导航页面,但你也使用内容页面,因为导航页面是内容页面的一个属性,正如我所说,这完全是对概念的误解:
public partial class App : Application
{
public App()
{
InitializeComponent();
var thePage = FreshPageModelResolver.ResolvePageModel<LogInViewModel>();
MainPage = new FreshNavigationContainer(thePage);
}
}
公共部分类应用程序:应用程序
{
公共应用程序()
{
初始化组件();
var thePage=FreshPageModelResolver.ResolvePageModel();
主页=新的FreshNavigationContainer(页面);
}
}
我在这个问题上没有这样说,但所有这些的目的都是为了不在屏幕顶部看到一个栏,现在我明白了,因为导航页面和内容页面不是两件不同的事情,所以可以在page.xaml中使用:
<ContentPage NavigationPage.HasNavigationBar="False">
根据我对例外情况的理解,您的放弃的PasswordViewModel
或视图中存在导致此问题的内容,有可能引发异常,或者您没有遵循文件夹结构或FreshMVVM
现在,为了让我们更容易理解这一点,您必须在此处添加此异常的Stracktrace@FreakyAli如何获取异常的堆栈跟踪抛出异常时在catch块中添加try catch块异常对象包含堆栈跟踪!如果您有例外,这是开始查找问题的最佳位置@我用StackTrace更新了这个问题!找不到IFreshNavigationService的实例,因此我认为您没有正确初始化FreshMVVM。在某些时候,TinyIOC需要被告知如何实例化导航服务。我也怀疑它是否适用于非模态页面。