如何将实例传递给WPF Window类?

时间:2011-09-21 19:23:39

标签: c# .net wpf

假设我有3个类来处理所有与数据库相关的请求:

public class DB_A{}
public class DB_B{}
public class DB_C{}

我有2个窗口与用户互动:

window1.xaml;window1.xaml.cs;
window2.xaml;window2.xaml.cs

as window1& window2需要与数据库交互,他们需要使用前3个类的函数,我创建了一个类DataHandler:

public class DataHandler
{
    public DB_A a;
    public DB_B b;
    public DB_C c;

    public DataHandler()
    {
        a = new DB_A();
        b = new DB_B();
        c = new DB_C();
    }

    //some functions... ...
}

现在,类DataHandler可以处理所有与数据库相关的请求,现在我需要将一个DataHandler的瞬间传递给window1和window2。

我试图用参数重写window1和window2的构造函数,但它不允许我这样做。谷歌之后我知道WPF窗口窗体不允许带参数的构造函数。

有没有办法将我的DataHandler传递给两个窗口窗体类?

5 个答案:

答案 0 :(得分:1)

使DataHandler成为单身,然后让窗口类访问它。

public class DataHandler
{
    //singleton instance
    static DataHandler _instance = new DataHandler ();

    public DataHandler Instance
    {
          get { return _instance; }
    }
};

然后,

public partial class Window1 : Window
{
   DataHandler _dataHandler;

   public Window1()
   {
        InitializeComponent();

        _dataHandler = DataHandler.Instance;
   }
}

同样,编写其他Window类。

甚至更好的是,应用MVP模式的一些变体,最有可能是MVVM。阅读这些文章:

答案 1 :(得分:1)

是的,你可以,有多种方法可以做到这一点,

  1. 您使DataHandler成为单身人士。 (我不喜欢这个)
  2. 将一个公共静态属性添加到app.xaml.cs,该app.xaml.cs具有您的DataHandler类的实例,并在Windows的构造函数中从app中获取该属性。 (这是一种更好的方法)
  3. 添加ViewModel并让该视图模型向两个Windows提供数据。 (我更喜欢这个!) 如果你需要一个例子让我知道哪一个适合你,我会提供一个。

答案 2 :(得分:0)

你不能让DataHandler类成为单例并在任何你想要的地方使用它的方法,而无需重新实例化类吗?

答案 3 :(得分:0)

您可以在Window构造函数上使用参数。或者,您可以通过属性传递它,将DataHandler对象设置为某个公共静态属性,或者甚至只是将DataHandler设置为静态类。

答案 4 :(得分:0)

有很多方法可以实现这一目标。

你可以让DataHandler成为单身人士。

由于DataHandler具有无参数构造函数,您可以在应用程序的资源字典中创建它,并让对象使用FindResource来获取它。

在使用MVVM模式的实现中,你会看到很常见的一种模式是视图模型包含对共享对象的引用,并且窗口通过绑定来访问它们,尽管我非常怀疑你是使用MVVM。