2017-08-17 13 views
0

メインウィンドウが既に構築されているプログラムがあり、「プロファイラ」というウィンドウを追加しています。メインウィンドウには、使用できる必要があるリストがありますので、メインウィンドウをベースとして使用する必要があります。別のWPFウィンドウからリストを継承する

私がした最初の事は、私は私が保護に必要なリストを作成し、メインウィンドウクラスにあったし、作成してもらう方法:プロファイラーウィンドウに、私は(メインウィンドウを使用しようとした後

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; 


    } 
} 

これは、「プロファイラ」の部分的な宣言が異なる基底クラスを指定することはできませんエラーが発生しました。私はエラーを調べようとしましたが、これは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> 

そして、このような「ベース:DspWindow」などの複数のエラーが発生した接頭辞「ベースを」が見つかりませんでしたが "を定義されていませんbase 'は宣言されていないプレフィックスです。 誰かが私がどこに行くのか教えてもらえますか?

+0

あなたは自分のメインウィンドウのインスタンスVARメイン=(メインウィンドウ)Application.Current.MainWindowをつかむ、基本クラスとしてそれを使用する必要はありません。 – JohnChris

答えて

1

あなたは継承の仕組みを理解していないようです。

オブジェクトのクラスのメンバを使用しているだけで、それを継承する必要はありません。

私はあなたが定義を使用するのではなく、リストの価値だと思うので、DspWindowから継承する代わりに、Profilerでそれを参照することをお勧めします。

は、私はあなたの窓は、どのように連携するかわかりませんが、私はDspWindowが新しいProfiler作成することを推測するので、私はお勧めしたい、あなたは、パラメータとしてDspWindow及び使用をrecievesコンストラクタで新しいProfilerオブジェクトを作成することができます内部的にそのインスタンス。

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(); 
関連する問題