Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows phone 7 Windows Phone-为PhoneApplicationPage使用泛型类_Windows Phone 7_Xaml_Windows Phone 8_Windows Phone - Fatal编程技术网

Windows phone 7 Windows Phone-为PhoneApplicationPage使用泛型类

Windows phone 7 Windows Phone-为PhoneApplicationPage使用泛型类,windows-phone-7,xaml,windows-phone-8,windows-phone,Windows Phone 7,Xaml,Windows Phone 8,Windows Phone,我有一个由AddPage.xaml和AddPage.xaml.cs组成的页面。我想创建一个泛型类AddPage,它从PhoneApplicationPage扩展到外包一些重复的代码,比如Save或Cancel。 如果我将基类从PhoneApplicationPage更改为新的泛型类,则会出现以下错误:“AddPage”的部分声明不能指定不同的基类。为了外包某些函数,您只需声明一些执行常见工作的add类。拥有另一页并不能完成这项工作 public class Add { public bo

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

为了外包某些函数,您只需声明一些执行常见工作的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"); 

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

要实现这一点,您需要执行以下操作

首先,创建基类

public class SaveCancelPhoneApplicationPage : PhoneApplicationPage
{
    protected void Save() { ... }
    protected void Cancel() { ... }
}
然后,需要修改AddPage以从基类继承。所需的主要位置是代码(AddPage.xaml.cs)和xaml中

代码:

Xaml:



我想从基类继承,因为我需要重写OnNavigatedTo等方法。如果您想消除冗余,这将起作用。。我不能理解你的意图。。为这样的类创建了一个对象之后,创建对象的页面可以覆盖这些方法。我知道,但它有一些缺点。例如,我想实现一个appbar本地化的方法。按照您的方式,我需要将appbar实例传递给该方法。如果我从类继承,我可以简单地调用它,而无需传递参数。我的目的是为我的xaml页面创建一个基类,它实现了一些常见的方法,如本地化、保存…@websocialist您想为另一个页面扩展一个页面。那么该页面不能是电话应用程序的一部分。您不能扩展两个类。或者您非常有兴趣制作页面,请使用用户控件来完成这项工作。无论哪种方式,您都必须找出实例或引用。我的SaveCancelPhoneApplicationPage是通用的。由于需要传递类型参数,我如何在XAML中解决此问题?另一个问题:我遇到一个异常“未能分配给属性”Microsoft.Phone.Shell.ApplicationBarIconButton.Click”。[行:65位置:23]”。问题似乎是我不能对applicationbar的click事件使用继承的方法。如果我重写了这些方法,那么它就可以工作了!但是为什么会有这种奇怪的行为呢?你不能让它通用,xaml不支持这种行为。最好的办法是使方法genericEvents必须直接进入顶级类。您可能希望沿着MVVM的路径,而不是对PhoneApplicationPage进行分类。我知道(标准)appbar按钮不允许绑定,但是您仍然可以有一个调用VM的click事件。也有可用的工具包有可绑定的AppBars这听起来不太好。我确实需要一个泛型类,因为我需要在运行时创建一个对象实例。泛型方法不起作用,因为我想覆盖PhoneApplicationPage中的现有方法。
public partial class AddPage : SaveCancelPhoneApplicationPage  {  ... }
<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>
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();
    }
}