7

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

何か助けはありますか?

4

3 に答える 3