MVVMCross 5ソリューションテンプレートのXamarinフォームから作業しており、パッケージを最新バージョン(MVVMCrossの5.3.2)に更新しました。そうすることで、とりわけUWPプロジェクトの中でいくつかの名前空間が変更されます。MVVMCross 5.3.2 UWP:MvxFormsUwpViewPresenter用のIMvxWindowsFrameを取得する場所
私は引数としてIMvxWindowsFrameをとるMvxFormsUwpViewPresenterとしてIMvxViewPresenterを解決する必要があるようです。 Setup.csのセットアップファイルメソッドには、引数として渡されたXamlControls.Frame rootFrameがありますが、それが何とかIMvxWindowsFrameとしてキャストされているかどうかはわかりません。
ここでは、IMvxWindowsFrameを実装するオブジェクトをプルできますか、ルートフレームをIMvxWindowsFrameに正当なものにする別の方法がありますか?
public class Setup : MvxFormsWindowsSetup
{
private readonly LaunchActivatedEventArgs _launchActivatedEventArgs;
public Setup(XamlControls.Frame rootFrame, LaunchActivatedEventArgs e) : base(rootFrame, e)
{
_launchActivatedEventArgs = e;
// Mvx.RegisterSingleton<IMvxWindowsFrame>(rootFrame);
}
protected override void InitializeFirstChance()
{
base.InitializeFirstChance();
Mvx.RegisterSingleton<Core.Services.ILocalizeService>(new Services.LocalizeService());
Mvx.RegisterSingleton<ISettings>(CrossSettings.Current);
Mvx.RegisterType<IMvxViewPresenter, MvxFormsUwpViewPresenter>();
}
protected override MvxFormsApplication CreateFormsApplication()
{
return new Core.FormsApp();
}
protected override IMvxApplication CreateApp()
{
return new Core.MvxApp();
}
protected override IMvxTrace CreateDebugTrace()
{
return new Core.DebugTrace();
}
}
public sealed partial class MainPage : WindowsPage
{
public MainPage()
{
this.InitializeComponent();
var start = Mvx.Resolve<IMvxAppStart>();
start.Start();
var presenter = Mvx.Resolve<IMvxViewPresenter>() as MvxFormsUwpViewPresenter;
LoadApplication(presenter.FormsApplication);
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
}
}
編集:私はhttps://github.com/MvvmCross/MvvmCross/blob/develop/MvvmCross-Forms/MvvmCross.Forms.Uwp/Platform/MvxFormsWindowsSetup.csのソースコード内のクラスMvxFormsWindowsSetupにもっと見てきました。メソッドCreateViewPresenterでは、IMvxViewPresenterがすでにMvxWrappedFrameでシングルトンとして登録されていますが、デフォルトでは、var presenter = Mvx.Resolve()をMvxFormsUwpViewPresenterとして呼び出すときにコードが解決されません。 Windowsのページで。考えられるバグ?私がそれを自分で解決できるかどうかを試してみる。
それは私が右MVXがUWPためMvvmCross 5.3.2へアップデートすると、プレゼンターが解決する必要があるタイプ/シングルトン
protected override IMvxWindowsViewPresenter CreateViewPresenter(IMvxWindowsFrame rootFrame)
{
var presenter = new MvxFormsUwpViewPresenter(rootFrame, FormsApplication);
Mvx.RegisterSingleton<IMvxFormsViewPresenter>(presenter);
var presenter2 = Mvx.GetSingleton<IMvxViewPresenter>() as MvxFormsUwpViewPresenter;
return presenter;
}
あなたが何をしようとしているかは完全にはわかりません。 'IMvxFormsViewPresenter'を解決する必要があります、なぜ' IMvxViewPresenter'を解決するのですか? – Martijn00
ええ、私はちょうど約2分前にそれを実現しました。それは正解でした。 Starterパッケージのデフォルトの5.1.1では、IMvxViewPresenterを解決しますが、5.3.2ではIMvxFormsViewPresenterが必要です。 –