LoginSignup
3
6

More than 5 years have passed since last update.

Xamarin.Forms.WPFでPrismを使う

Last updated at Posted at 2019-02-21

現状、PrismはXamarin.Forms.WPFに対応しておらず、エラーが出て使えないのですが、少しソースを修正してやることで、割と簡単に対応させることができたので、その方法を記載します。

対応方法

Prismのリポジトリをクローンして、v7.1.0のタグでチェックアウトします。
修正するファイルは以下の2つです。

Prism.csprojの修正

36行目をコメントアウトします。

  <ItemGroup>
    <!--<Compile Condition=" '$(TargetFramework)' == 'net45' " Remove="Navigation/**" />-->
    <Compile Update="Properties\Resources.Designer.cs" DesignTime="True" AutoGen="True" DependentUpon="Resources.resx" />
    <EmbeddedResource Update="Properties\Resources.resx" Generator="ResXFileCodeGenerator" LastGenOutput="Resources.Designer.cs" />
  </ItemGroup>

IModuleManager.csの修正

27行目をコメントアウトします。

#if NET45
        /// <summary>
        /// Raised repeatedly to provide progress as modules are downloaded.
        /// </summary>
        //event EventHandler<ModuleDownloadProgressChangedEventArgs> ModuleDownloadProgressChanged;
#endif

NuGetパッケージの作成

Prism.DryIoc.FormsやPrism.Unity.Formsプロジェクトで、パックを実行すると、Source/Artifacts/Nugetにパッケージが作成されます。利用時は、通常のパッケージは使わずに、この作成したパッケージを参照するようにします。
今回の修正で変わっているパッケージは、Prism.Coreのみなので、これだけ参照するようにしても大丈夫です。ただし、この場合には、パッケージのバージョンを7.1.1など、現行のバージョンである7.1.0.431より大きくしておかなければいけません。

サンプル

簡単なサンプルを作成しました。

PrismForWPFSample

2019-02-22.png2019-02-22 (1).png

Prismを利用したViewModelのバインドや画面遷移がうまく動いていることが確認できます。もちろんiOSやAndroidでも普通に動きます。
サンプルのNuGetフォルダに修正したPrismのパッケージが含まれているので、それをダウンロードしてそのまま使ってもらっても構いません。

おわりに

完全にテストしたわけではないので、もしかしたら不具合が起きるかもしれませんが、普通に使う分には問題ないんじゃないかと思います。teratailの質問にもあって、気にはなっていたので、今回できることがわかって良かったです。

3
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
6