2015-11-14 36 views
2

我想使用UWP的新功能 - > x:綁定。爲此,我的所有頁面都需要具有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的智能感知我提供了MainPage.xaml中,從「MainVM」性質,因而可以這樣寫:

<ListView ItemsSource="{x:Bind VM.AlarmsVM}"> 

不幸的是,當我嘗試生成項目,我得到錯誤MainPage.gics:

小號everity代碼說明項目文件行 錯誤CS0305使用通用型 '的BasePage' 需要1個類型參數Realarm d:\ Realarm \ OBJ \ 86 \調試\查看\網頁\ MainPage.gics 13

任何幫助?

+0

看起來好像沒什麼問題。也許是因爲你的班級被標記爲「抽象」?你不能實例化一個抽象類,嘗試刪除它。 –

+0

當然,我有派生類,我試圖實例化。你有沒有試過從問題中運行代碼? –

+0

@de_ViL你解決了這個問題嗎?我有同樣的問題,我發現的一切都說它應該工作,但我得到了同樣的錯誤,因爲你 – thorkia

回答

0

我得到這個工作使用Xamarin.Forms。

基頁:

public abstract class BaseContentPage<TViewModel> : ContentPage where TViewModel : BaseViewModel, new() 

HomePage.cs:

public partial class HomePage : BaseContentPage<HomeViewModel> 

HomePage.xaml:

<d:BaseContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:d="clr-namespace:Sample.Pages;assembly=Sample" xmlns:vm="clr-namespace:Sample.ViewModels;assembly=Sample" x:Class="Sample.Pages.HomePage" x:TypeArguments="vm:HomeViewModel"> 
<ContentPage.Content> 
</ContentPage.Content>