私はそれを宣言するクラスを持っていますが、そのクラスは別のより大きなクラスにアイテムとして追加されます。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(); };
同様に、StringBuilder.Append
Initを変更して、オブジェクトへの参照を返すことができます。
Public FitsView Init()
{
//Do stuff
return this;
}
それで:
FitsView fv = new FitsView().Init();
あなたのinitメソッドのためにデザイナーが問題を抱えた場合、私が考えることができる2つの理由があります:
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
2番目の問題については、Init
メソッドを別のメソッドでラップしてInitWrapper
、ラッパーメソッドのデザインモードチェックを行うことができます。