rksoftware

Visual Studio とか C# とかが好きです

.NET Core 3 の WPF でもデザイナをあきらめない(ViewModel/.NET Standard)

以前に .NET Core 3 の WPF でデザイナを使うために、XAML ファイルを .NET Framework プロジェクトで開くという力強い記事を書きました。
その続編です。

■ ViewModel はどうするか?

■ 普通に .NET Core プロジェクトに ViewModel を追加してみます。

  1. プロジェクトに MainWindowViewModel クラスを追加。
  2. XAML に xmlns:vm="clr-namespace:WpfAppNetCore" を追加。(WpfAppNetCore はネームスペース)
  3. DataContractMainWindowViewModel クラスを設定。
<Window.DataContext>
    <vm:MainWindowViewModel/>
</Window.DataContext>

■ エラー

.NET Framework プロジェクトでエラーが出ます。.NET Framework プロジェクトからは MainWindowViewModel クラスは見えないので言われてみれば当然ですね。
f:id:rksoftware:20190324163110j:plain

■ プロジェクト参照(失敗)

見えないなら参照してしまえと、.NET Framework プロジェクトから .NET Core プロジェクトの参照を試みると

f:id:rksoftware:20190324163132j:plain

プロジェクト '..\WpfAppNetCore\WpfAppNetCore.csproj' は 'netcoreapp3.0' を対象にしています。'.NETFramework,Version=v4.7.2' を対象とするプロジェクトからは参照できません。
WpfAppNetFramework

言われてみれば当然ですね。

■ .NET Standard

見えないなら、ViewModel クラスを .NET Core、.NET Framework のどちらでも参照できるクラスライブラリプロジェクトに入れてしまいましょう。
f:id:rksoftware:20190324163358j:plain

※ XAML の xmlns:vm="clr-namespace:WpfAppNetCore"xmlns:vm="clr-namespace:ClassLibraryNetStandard;assembly=ClassLibraryNetStandard" に書き換えました。(WpfAppNetCore/ClassLibraryNetStandard はネームスペース)

■ 動作

デザイナも使えるし、ViewModel も使えるしいい感じにできました。やはり .NET Standard ですね。
f:id:rksoftware:20190324153117j:plain

□ .NET Core 3 の WPF でもデザイナをあきらめない記事シリーズの目次