假设我有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传递给两个窗口窗体类?
答案 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)
是的,你可以,有多种方法可以做到这一点,
答案 2 :(得分:0)
你不能让DataHandler类成为单例并在任何你想要的地方使用它的方法,而无需重新实例化类吗?
答案 3 :(得分:0)
您可以在Window构造函数上使用参数。或者,您可以通过属性传递它,将DataHandler对象设置为某个公共静态属性,或者甚至只是将DataHandler设置为静态类。
答案 4 :(得分:0)
有很多方法可以实现这一目标。
你可以让DataHandler
成为单身人士。
由于DataHandler
具有无参数构造函数,您可以在应用程序的资源字典中创建它,并让对象使用FindResource
来获取它。
在使用MVVM模式的实现中,你会看到很常见的一种模式是视图模型包含对共享对象的引用,并且窗口通过绑定来访问它们,尽管我非常怀疑你是使用MVVM。