你可以打电话给班级吗?声明对象时的方法?

时间:2012-12-05 20:47:30

标签: c# wpf constructor definition

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

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

4 个答案:

答案 0 :(得分:4)

您可以使用静态函数来执行此操作:

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

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

答案 1 :(得分:0)

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

并像这样使用它:

FitsView fv = new FitsView();
fv.someCustomEvent += (o,e) => { fv.Init(); };

答案 2 :(得分:0)

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

Public FitsView Init()
{
    //Do stuff

    return this;
}

然后:

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

答案 3 :(得分:0)

如果设计人员因为你的init方法而出现问题,我可以想到两个原因:

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

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

  1. 为您的班级:Is there a DesignMode property in WPF?
  2. 对于您的视图模型:http://blog.laranjee.com/how-to-get-design-mode-property-in-wpf/
  3. 此处的人也指出了这个错误,所以请注意(在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,然后检查包装方法的设计模式。