UWP -> x:Bind の新機能を使いたいです。そのためには、すべてのページに ViewModel プロパティが必要です (チュートリアルで説明されているように)。コードの重複を避けるために、次のように基本クラスを確立しました。
public abstract class BasePage<TBaseVM> : Page, where TBaseVM : BaseVM
{
public TBaseVM VM { get; private set; }
protected BasePage()
{
DataContextChanged += (s, e) => VM = e.NewValue as TBaseVM;
}
}
ご覧のとおり、この BasePage クラスには「VM」というプロパティが含まれており、プロパティのタイプは BaseVM です。したがって、派生クラスごとに VM プロパティを定義する必要はありません。
次に、次のように xaml で定義された派生ページ 'MainPage' を作成しました。
<pages:BasePage
x:Class="Realarm.View.Pages.MainPage"
x:TypeArguments="viewModel:MainVM">
そうすることで、Resharper の Intellisense でさえ、MainPage.xaml の「MainVM」からプロパティを提供してくれるので、次のように記述できます。
<ListView ItemsSource="{x:Bind VM.AlarmsVM}">
残念ながら、プロジェクトをビルドしようとすると、MainPage.gics でエラーが発生します。
重大度コード 説明 プロジェクト ファイル行エラー CS0305 ジェネリック型 'BasePage' を使用するには、1 つの型引数が必要です Realarm D:...\Realarm\obj\x86\Debug\View\Pages\MainPage.gics 13
何か助けはありますか?