2011-08-03 7 views
0

wpfユーザーコントロールxamlとcodebehindをシリアル化する必要があります。 XamlWriter.Save()はこのような状況で何ができるのですか?私のsitutationは、カスタムメソッド、サブスクライブされたイベント(例:ボタンクリック)を含むusercontrolを持っています。私は(usercontrolを実行時に作成するために)私はそのイベントとメソッドを実行したいです。申し訳ありませんが私の英語はあまり良くありません。xamlとコードの後ろにwpfユーザーコントロールをシリアル化する方法

+2

なぜコードをシリアル化しますか? – gideon

+0

あなたはこれをやりたい理由を説明できますか? Reflectorを使用してC#コードを取得することはできませんか? –

+1

私は実行時にusercontrolを作成します。例えば;ユーザーコントロールにあるボタンは、ユーザーコントロールを非直列化するときにクリックイベント(購読)を受け取り、そのイベントを実行します。 –

答えて

0

MEFを使用して、ユーザーコントロール用のプラグイン構造を構築できます。その場でユーザーコントロールを作成したいのですが、イベントハンドラはプロジェクトのどこか他の場所にハードコードされている必要があります。プラグイン構造を使用すると、プラグインを収集して再利用できます。イベントは何かコマンドによって処理することができます。たぶんシナリオを与えて、もっと詳しく説明することができます。

さらに、ISerializableは、メソッドやイベントではなく、フィールドのカスタムバイナリシリアル化の方法を提供します。関連する質問があります: What is the point of the ISerializable interface? ;一方、Webコントロールがビューステートをどのように保存するかのようないくつかのパターンを試すことができます。例えば 2の仮想メソッド:

public virtual byte[] SaveState(); // it saves the states for your custom control 
public virtual void LoadState(byte[] state) // it restore your state back to the control. 

カスタムコードは次のようにする必要があります:イベントのために

byte[] state = controlA.SaveState(); // this method saves its own state. 
YourControl controlB = new YourControl(); 
controlB.LoadState(state); // this method load the save state from A to B itself. 

、すべてのイベントハンドラの名前を持って、あなたはまた、状態にそのハンドラ名をシリアル化することができますし、同じ名前のコンテナから保存された名前でそれを見つける。私はこの方法を保存する経験はありません。

フィールド、イベント、メソッドなどの状態を保存してロードしたい場合は、おそらくシリアル化が適切な方法ではないと思います。

+0

UserControlはISerializableインターフェイスを継承します。私はシリアル化し、任意のメンバー、イベント、メソッドを失うことなくusercontrolを逆シリアル化します。私の英語はあまり良くないので説明することができます –

+0

私は私の答えを更新しました、それを確認してください。 – Howard

+0

ありがとうすべての投稿 –

関連する問題