2017-08-21 13 views
1

私は親フォーム(MainForm)を持っており、そこからwpfウィンドウ(ChildWPF)を呼び出します。 親ウィンドウにはデータアクセスメソッドがいくつかあります。私はChildWPFから電話をかけて、彼らに私に返す方法が必要です。私は代理人を介してこれをやりたかった(私はMainFormを参照として渡したくない)。 ChildWPFで子ウィンドウからデリゲートを介して親メソッドを呼び出す

public delegate List<string> MainFormMethod(); 

今、私は私のChildWPFでのMainFormに宣言していますhanlderを接続する方法を見つけるように見える傾けます。たぶんイベントを使用する方が良いでしょうか?

+0

ここではオプションではありません。 – cantdoanything33

答えて

1

ISomeDataAccessインターフェイスへデータアクセスメソッドを抽出し、MainFormからこのインターフェイスを実現するクラスにデータアクセスロジックを転送します。この後、ChildWpfでこのクラスを共有することができます。 ChildWpfフォームを作成するときに、ISomeDataAccessのインスタンスをコンストラクタパラメータとして送信します。
編集: ChildWpfプロジェクトでは、ChildWpfにのみ必要なデータアクセスレイヤの一部を使用してインターフェイスを作成します。 DataAccessクラスのダイレクト・アダプター・クラスを作成するか、または中間アダプター・クラスを作成することができます。

直接実装:

public class DataAccess : IChildDataAccess 
{ 
    public void SomeDataLogic1() 
    {} 

    public void SomeDataLogic2() 
    {} 

    public void SomeDataLogic3() 
    {} 
} 

public interface IChildDataAccess 
{ 
    void SomeDataLogic1(); 
    void SomeDataLogic3(); 
} 

または中間クラスを持つ:

public class DataAccess 
{ 
    public void SomeDataLogic1() 
    {} 

    public void SomeDataLogic2() 
    {} 

    public void SomeDataLogic3() 
    {} 
} 

public class ChildDataAccess : IChildDataAccess 
{ 
    private readonly DataAccess _dataAccess; 

    public ChildDataAccess(DataAccess dataAccess) 
    { 
     if (dataAccess == null) 
      throw new ArgumentException(nameof(dataAccess)); 
     _dataAccess = dataAccess; 
    } 

    public void SomeDataLogic1() 
    { 
     _dataAccess.SomeDataLogic1(); 
    } 

    public void SomeDataLogic3() 
    { 
     _dataAccess.SomeDataLogic3(); 
    } 
} 

public interface IChildDataAccess 
{ 
    void SomeDataLogic1(); 
    void SomeDataLogic3(); 
} 
+0

アプリケーション "MainForm"は膨大です。 MainFormはChildWPFを参照しています。 MainFormプロジェクトには、すべてのデータアクセスメソッドを持つクラスがあり、プロジェクトから参照することはできません。 – cantdoanything33

+0

@ cantdoanything33私は私の答えに更新を加えます。 – Dmitry

関連する問題