3

我有一个类,我在其中声明它,但是该类作为项目添加到另一个更大的类中。有没有办法Init()在与调用相同的语句中调用该方法?类似于在调用构造函数时定义公共属性/变量。我不想Init()在构造函数中调用该方法,因为它与 WPF 设计器混淆。

 FitsView fv = new FitsView();
 fv.Init();
4

4 回答 4

4

您可以使用静态函数来做到这一点:

public static FitsView CreateFitsView()
{
    var fv = new FitsView();
    fv.Init();
    return fv;
}

然后你只需调用该静态函数而不是new FitsView()

于 2012-12-05T20:50:41.880 回答
0

如果它知道何时准备好初始化,您也可以尝试将自定义事件挂钩到您的 FitsView?

并像这样使用它:

FitsView fv = new FitsView();
fv.someCustomEvent += (o,e) => { fv.Init(); };
于 2012-12-05T20:52:50.217 回答
0

如果设计师因为您的 init 方法而遇到问题,我可以想到两个原因:

  • 这是因为您在Init方法中所做的某些事情需要应用程序的局部性(读取资源或文件或使用硬件)
  • 调用您的Init方法需要动态加载一些外部程序集。

对于第一件事,您可能要检查:

  1. 对于您的班级:WPF 中是否有 DesignMode 属性?
  2. 对于您的视图模型:http ://blog.laranjee.com/how-to-get-design-mode-property-in-wpf/

这里的人也指出了这个错误,所以请注意(在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,然后对包装器方法进行设计模式检查。

于 2012-12-05T21:09:32.070 回答
0

类似于StringBuilder.Append您可以更改 Init 以返回对对象的引用。

Public FitsView Init()
{
    //Do stuff

    return this;
}

然后:

FitsView fv = new FitsView().Init();
于 2012-12-05T20:53:35.063 回答