MvvmCross-Wpf CustomPresenter
MvvmCross - Wpf CustomPresenter
我正在尝试使用 MvxWpfViewPresenter 从一个视图导航到另一个视图,但在尝试使用 IMvxWpfViewsContainer 呈现它时遇到了一些问题。
我已经在我的 App.Xaml.Mvx.cs 中注册了 IMvxWpfViewsContainer 并向其中添加了我的 ViewModel。
private void DoSetup()
{
LoadMvxAssemblyResources();
var presenter = new MvxWpfPresenter(MainWindow);
var setup = new Setup(Dispatcher, presenter);
setup.Initialize();
Mvx.RegisterType<IMvxWpfViewsContainer, MvxWpfViewsContainer>();
var viewContainer = Mvx.Resolve<IMvxWpfViewsContainer>();
viewContainer.Add<MyViewModel, MyView>(); //Adding my view to the IMvxWpfViewsContainer
var start = Mvx.Resolve<IMvxAppStart>();
start.Start();
_setupComplete = true;
}
在我的 MvxWpfPresenter 中,我从 MvxViewModelRequest.GetDefaultRequest(rootHint.NewRootType) 收到默认请求,但 IMvxWpfViewsContainer 在尝试为我的请求创建视图时在下一行抛出异常。我的主持人是:
public class MvxWpfPresenter : MvxWpfViewPresenter
{
private readonly Window _mainWindow;
public MvxWpfPresenter(Window mainWindow)
{
_mainWindow = mainWindow;
}
public override void Present(FrameworkElement frameworkElement)
{
(_mainWindow.Content as Grid).Children.Clear();
(_mainWindow.Content as Grid).Children.Add(frameworkElement);
}
public override void ChangePresentation(Cirrious.MvvmCross.ViewModels.MvxPresentationHint hint)
{
if (hint is MvxRootPresentationHint)
{
var rootHint = hint as MvxRootPresentationHint;
var requestTranslator = Mvx.Resolve<IMvxWpfViewsContainer>();
var view = MvxViewModelRequest.GetDefaultRequest(rootHint.NewRootType);
Present(requestTranslator.CreateView(view));
}
else
{
base.ChangePresentation(hint);
}
}
抛出的异常是:
An exception of type 'System.Collections.Generic.KeyNotFoundException' occurred in Cirrious.MvvmCross.dll but was not handled in user code
Additional information: Could not find view for MySolution.Core.ViewModels.MyViewModel
我是注册错了还是忘记了什么?
堆栈是:
at Cirrious.MvvmCross.Views.MvxViewsContainer.GetViewType(Type viewModelType)
at Cirrious.MvvmCross.Wpf.Views.MvxWpfViewsContainer.CreateView(MvxViewModelRequest request)
at MySolution.MvxWpfPresenter.ChangePresentation(MvxPresentationHint hint) in **MYPATH**\MvxWpfPresenter.cs:line 32
at Cirrious.MvvmCross.Wpf.Views.MvxWpfViewDispatcher.<>c__DisplayClass4.<ChangePresentation>b__3()
at Cirrious.CrossCore.Core.MvxMainThreadDispatcher.ExceptionMaskedAction(Action action)
我能够在我的代码中找到问题。我会 post 在这里给出答案,以防有人遇到同样的问题。
当我注册 IMvxWpfViewsContainer 时,我只是在注册它。相反,我不得不将其注册为单身人士。
所以解决方案是修改代码自:
Mvx.RegisterType<IMvxWpfViewsContainer, MvxWpfViewsContainer>();
收件人:
Mvx.RegisterSingleton<IMvxWpfViewsContainer>(() => new MvxWpfViewsContainer());
我正在尝试使用 MvxWpfViewPresenter 从一个视图导航到另一个视图,但在尝试使用 IMvxWpfViewsContainer 呈现它时遇到了一些问题。
我已经在我的 App.Xaml.Mvx.cs 中注册了 IMvxWpfViewsContainer 并向其中添加了我的 ViewModel。
private void DoSetup()
{
LoadMvxAssemblyResources();
var presenter = new MvxWpfPresenter(MainWindow);
var setup = new Setup(Dispatcher, presenter);
setup.Initialize();
Mvx.RegisterType<IMvxWpfViewsContainer, MvxWpfViewsContainer>();
var viewContainer = Mvx.Resolve<IMvxWpfViewsContainer>();
viewContainer.Add<MyViewModel, MyView>(); //Adding my view to the IMvxWpfViewsContainer
var start = Mvx.Resolve<IMvxAppStart>();
start.Start();
_setupComplete = true;
}
在我的 MvxWpfPresenter 中,我从 MvxViewModelRequest.GetDefaultRequest(rootHint.NewRootType) 收到默认请求,但 IMvxWpfViewsContainer 在尝试为我的请求创建视图时在下一行抛出异常。我的主持人是:
public class MvxWpfPresenter : MvxWpfViewPresenter
{
private readonly Window _mainWindow;
public MvxWpfPresenter(Window mainWindow)
{
_mainWindow = mainWindow;
}
public override void Present(FrameworkElement frameworkElement)
{
(_mainWindow.Content as Grid).Children.Clear();
(_mainWindow.Content as Grid).Children.Add(frameworkElement);
}
public override void ChangePresentation(Cirrious.MvvmCross.ViewModels.MvxPresentationHint hint)
{
if (hint is MvxRootPresentationHint)
{
var rootHint = hint as MvxRootPresentationHint;
var requestTranslator = Mvx.Resolve<IMvxWpfViewsContainer>();
var view = MvxViewModelRequest.GetDefaultRequest(rootHint.NewRootType);
Present(requestTranslator.CreateView(view));
}
else
{
base.ChangePresentation(hint);
}
}
抛出的异常是:
An exception of type 'System.Collections.Generic.KeyNotFoundException' occurred in Cirrious.MvvmCross.dll but was not handled in user code
Additional information: Could not find view for MySolution.Core.ViewModels.MyViewModel
我是注册错了还是忘记了什么?
堆栈是:
at Cirrious.MvvmCross.Views.MvxViewsContainer.GetViewType(Type viewModelType)
at Cirrious.MvvmCross.Wpf.Views.MvxWpfViewsContainer.CreateView(MvxViewModelRequest request)
at MySolution.MvxWpfPresenter.ChangePresentation(MvxPresentationHint hint) in **MYPATH**\MvxWpfPresenter.cs:line 32
at Cirrious.MvvmCross.Wpf.Views.MvxWpfViewDispatcher.<>c__DisplayClass4.<ChangePresentation>b__3()
at Cirrious.CrossCore.Core.MvxMainThreadDispatcher.ExceptionMaskedAction(Action action)
我能够在我的代码中找到问题。我会 post 在这里给出答案,以防有人遇到同样的问题。
当我注册 IMvxWpfViewsContainer 时,我只是在注册它。相反,我不得不将其注册为单身人士。
所以解决方案是修改代码自:
Mvx.RegisterType<IMvxWpfViewsContainer, MvxWpfViewsContainer>();
收件人:
Mvx.RegisterSingleton<IMvxWpfViewsContainer>(() => new MvxWpfViewsContainer());