2017-10-31 2 views
0

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; 
    } 
+0

あなたが何をしようとしているかは完全にはわかりません。 'IMvxFormsViewPresenter'を解決する必要があります、なぜ' IMvxViewPresenter'を解決するのですか? – Martijn00

+0

ええ、私はちょうど約2分前にそれを実現しました。それは正解でした。 Starterパッケージのデフォルトの5.1.1では、IMvxViewPresenterを解決しますが、5.3.2ではIMvxFormsViewPresenterが必要です。 –

答えて

0

を登録すると仮定したときの後のコードを入れても、解決に失敗したように見えますIMvxViewPresenterではなくIMvxFormsViewPresenterとして使用します。インターフェイスの種類を変更すると、正しく読み込まれます。

 public MainPage() 
    { 
     this.InitializeComponent(); 

     var start = Mvx.Resolve<IMvxAppStart>(); 
     start.Start(); 

     var presenter = Mvx.Resolve<IMvxFormsViewPresenter>() as MvxFormsUwpViewPresenter; 

     LoadApplication(presenter.FormsApplication); 

     Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); 
    } 
関連する問題