Help us understand the problem. What is going on with this article?

Xamarin.Forms.WPFでPrismを使う

More than 1 year has passed since last update.

現状、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の質問にもあって、気にはなっていたので、今回できることがわかって良かったです。

f-miyu
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away