2013-04-01 40 views
3

我有一個由AddPage.xaml和AddPage.xaml.cs組成的頁面。我想創建一個通用的類AddPage,它從PhoneApplicationPage擴展到外包一些重複的代碼,比如Save或Cancel。 如果我將基類從PhoneApplicationPage更改爲新的泛型類,則會出現此錯誤:「AddPage」的部分聲明不得指定不同的基類。Windows Phone - 爲PhoneApplicationPage使用泛型類

回答

5

要做到這一點,您需要執行以下操作。

首先,創建你的基類

public class SaveCancelPhoneApplicationPage : PhoneApplicationPage 
{ 
    protected void Save() { ... } 
    protected void Cancel() { ... } 
} 

然後,你AddPage需要進行修改,以從基類繼承。這是需要的主要場所是代碼(AddPage.xaml.cs)內和XAML中

代碼:

public partial class AddPage : SaveCancelPhoneApplicationPage { ... } 

的XAML:

<local:SaveCancelPhoneApplicationPage 
    x:Class="MyPhone.Namespace.AddPage" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="clr-namespace:MyPhone.Namespace" 
     <!-- other xaml elements --> 
</local:SaveCancelPhoneApplicationPage> 

UPDATE:信息增加了一個基於在評論

如果你需要具有通用的功能,你必須使用頁來做到這一點(而不是ViewModel),那麼你可以直到做到這一點使用泛型方法

public abstract class SaveCancelPhoneApplicationPage : PhoneApplicationPage 
{ 
    protected override void OnNavigatedTo(blaa,blaa) 
    { 
     var obj = CreateMyObject(); 
     obj.DoStuff(); 
    } 

    // You should know what your objects are, 
    // don't make it usable by every phone dev out there 
    protected MyBaseObject MyObject { get; set; } 

    protected T GetMyObject<T>() where T : MyBaseObject 
    { 
     return MyObject as T; 
    } 
} 


public class AddPage : SaveCancelPhoneApplicationPage 
{ 
    public AddPage() 
    { 
     MyObject = new MyAddObject(); 
    } 
} 
+0

我的SaveCancelPhoneApplicationPage 是通用的。我怎麼能解決這個在XAML,因爲我需要通過類型參數? –

+0

另一個問題:我得到一個異常'分配給屬性'Microsoft.Phone.Shell.ApplicationBarIconButton.Click'失敗。 [Line:65 Position:23]'。這個問題似乎是我無法爲applicatiobar的click事件使用繼承的方法。如果我重寫方法,那麼它的工作原理!但爲什麼這種奇怪的行爲? –

+0

你不能使它通用,xaml不支持這個。最好的辦法是制定通用的方法 –

0

爲了外包一些功能,你只需要聲明一些添加類來完成常見工作。擁有另一個頁面並不能完成這項工作。

public class Add 
{ 
    public bool SaveContent(string filename, string content) 
{ 
    ....//some content 
    return true; 
} 

public string ViewContent(string filename) 
{ 
    string content=""; 
    ..... 
    return content; 
} 
} 

添加這部分代碼,您認爲它是多餘的。

Add obj=new Add(); 
obj.SaveContent("myfile.txt","Hello.This is my content."); 
string content("myfile.txt"); 

告訴我,如果這是你打算或不打算。

+0

我想從一個基地化酶繼承,因爲我需要如果你想消除冗餘,這將工作覆蓋樣的OnNavigatedTo等 –

+0

方法..我不能讓你目的。並且爲這樣的類創建了一個對象,您創建對象的頁面可以覆蓋這些方法。 – Mani

+0

我知道,但它有一些缺點。例如,我想實現一個appbar的本地化方法。用你的方式,我需要將appbar實例傳遞給方法。如果我從類繼承,我可以簡單地在沒有參數傳遞的情況下調用它。我的目的是爲我的xaml頁面提供一個基類,它實現了一些常見的方法,如本地化,保存... –