3

我有一个由 AddPage.xaml 和 AddPage.xaml.cs 组成的页面。我想创建一个从 PhoneApplicationPage 扩展的通用类 AddPage,以外包一些重复的代码,如保存或取消。如果我将基类从 PhoneApplicationPage 更改为我的新泛型类,我会收到此错误:“AddPage”的部分声明不得指定不同的基类。

4

2 回答 2

5

为此,您需要执行以下操作。

首先,创建你的基类

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

然后,您的 AddPage 需要修改为从基类继承。需要这样做的主要地方是在代码 (AddPage.xaml.cs) 和 xaml 中

代码:

public partial class AddPage : SaveCancelPhoneApplicationPage  {  ... }

xml:

<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();
    }
}
于 2013-04-02T05:47:30.740 回答
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"); 

告诉我这是否是您的意图。

于 2013-04-01T05:19:52.677 回答