Windows Phone - 使用PhoneApplicationPage的通用类

时间:2013-04-01 00:28:06

标签: windows-phone-7 xaml windows-phone-8 windows-phone

我有一个由AddPage.xaml和AddPage.xaml.cs组成的页面。我想创建一个泛型类AddPage,它从PhoneApplicationPage扩展到外包一些重复的代码,如Save或Cancel。 如果我将基类从PhoneApplicationPage更改为我的新泛型类,我会收到此错误:'AddPage'的部分声明不能指定不同的基类。

2 个答案:

答案 0 :(得分: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>

更新:根据评论添加信息

如果您需要具有类似通用功能,并且您必须使用Page来执行此操作(而不是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();
    }
}

答案 1 :(得分:0)

为了外包一些函数,你只需要声明一些可以完成常规工作的add类。有另一页不能做到这一点。

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"); 

告诉我这是不是你想要的。