从子窗口通过委托调用父方法

时间:2017-08-21 08:23:40

标签: c#

我有一个父窗体(MainForm),我可以从中调用一个wpf窗口(ChildWPF)。 在父窗口中,我有一些数据访问方法。我需要一种方法从ChildWPF调用它们并让它们返回给我。我想通过代表这样做(我不想通过MainForm作为referance)。

在ChildWPF中:

public delegate List<string> MainFormMethod();

现在我似乎无法找到一种方法将我在MainForm中声明的hanlder与我的ChildWPF连接起来。也许使用事件是一种更好的方法?

1 个答案:

答案 0 :(得分:1)

将数据访问方法提取到ISomeDataAccess接口,并将数据访问逻辑从MainForm传输到实现此接口的类。在此之后,您也可以在ChildWpf分享此课程。在创建ISomeDataAccess表单时,将ChildWpf接口的实例作为contructor参数发送 修改 使用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();
}