我有一个类,我在其中声明它,但是该类作为项目添加到另一个更大的类中。有没有办法Init()
在与调用相同的语句中调用该方法?类似于在调用构造函数时定义公共属性/变量。我不想Init()
在构造函数中调用该方法,因为它与 WPF 设计器混淆。
FitsView fv = new FitsView();
fv.Init();
我有一个类,我在其中声明它,但是该类作为项目添加到另一个更大的类中。有没有办法Init()
在与调用相同的语句中调用该方法?类似于在调用构造函数时定义公共属性/变量。我不想Init()
在构造函数中调用该方法,因为它与 WPF 设计器混淆。
FitsView fv = new FitsView();
fv.Init();
您可以使用静态函数来做到这一点:
public static FitsView CreateFitsView()
{
var fv = new FitsView();
fv.Init();
return fv;
}
然后你只需调用该静态函数而不是new FitsView()
如果它知道何时准备好初始化,您也可以尝试将自定义事件挂钩到您的 FitsView?
并像这样使用它:
FitsView fv = new FitsView();
fv.someCustomEvent += (o,e) => { fv.Init(); };
如果设计师因为您的 init 方法而遇到问题,我可以想到两个原因:
Init
方法中所做的某些事情需要应用程序的局部性(读取资源或文件或使用硬件)Init
方法需要动态加载一些外部程序集。对于第一件事,您可能要检查:
这里的人也指出了这个错误,所以请注意(在winforms中托管wpf):https ://connect.microsoft.com/VisualStudio/feedback/details/620001/system-componentmodel-designerproperties-getisindesignmode-does-not-work- if-the-wpf-is-hosted-on-a-winform#tabs
对于第二个问题,您可以将您的Init
方法包装在另一个假设中InitWrapper
,然后对包装器方法进行设计模式检查。
类似于StringBuilder.Append
您可以更改 Init 以返回对对象的引用。
Public FitsView Init()
{
//Do stuff
return this;
}
然后:
FitsView fv = new FitsView().Init();