从另一个WPF窗口继承列表

时间:2017-08-17 15:32:37

标签: c# wpf

我有一个已经构建了主窗口的程序,我正在添加一个名为“Profiler”的窗口。主窗口中有一个我需要能够使用的列表,因此我需要使用主窗口作为基础。

我做的第一件事就是在主窗口类中我制作了我需要保护并创建并获取方法的列表:

 protected List<PaperRoll> paperRolls = new List<PaperRoll>(); 

    public List<PaperRoll> PaperRolls
    {
        get { return paperRolls; }
    }

然后在探查器窗口中,我尝试使用主窗口(称为DspWindow)作为基类:

 public partial class Profiler : DspWindow 
{
    public Profiler() : base ()
    {
        InitializeComponent();

        List<PaperRoll> pr = base.PaperRolls;


    }
}

这导致错误'Profiler'的部分声明不得指定不同的基类。我试图研究错误,它认为这是因为xaml不是从基类继承的。因此,我更改为xaml以包含基类:

<base:DspWindow x:Class="DSP_Simulator.Profiler"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:DSP_Simulator"
    mc:Ignorable="d"
    Title="Profiler" Height="300" Width="300">
<Grid>

</Grid>
</base:DspWindow>

这导致了多个错误,例如'base:未找到DspWindow 前缀'base'未定义'base'是未声明的前缀。 请有人能告诉我我要去哪里吗?

1 个答案:

答案 0 :(得分:1)

您似乎不了解继承的工作原理。

仅仅因为你想在一个对象中使用一个类的成员并不意味着你必须继承它。

我认为你不想使用定义而是使用列表的值,所以我建议你不应该继承DspWindow,而应该在Profiler中引用它。

我不知道你的窗口是如何协同工作的,但我想DspWindow创建了一个新的Profiler,所以我建议你可以创建一个新的Profiler对象。接收DspWindow作为参数然后在内部使用其实例的构造函数。

public partial class Profiler : Window
{
    private DspWindow dspWindow;    

    public Profiler(DspWindow dspWindow)
    {
        InitializeComponent();
        this.dspWindow = dspWindow;
    }

    void DoSomething() 
    {
        int numberOfPaperRolls = dspWindow.PaperRolls.Count; //you can access the list in this object aswell!
    }
}

DspWindow

var prof = new Profiler(this);
prof.Show();