2012-03-08 11 views
0

<ScriptableMember()>属性で装飾されたDoSomething()という名前のメソッドを持つSilverlightコントロールがあります。私はこのメソッドをと呼びます。をJavaScriptから呼び出すと、SL側から「メソッド呼び出されました!」というメッセージボックスが表示されます。JavaScriptからSilverlightコントロールのScriptableMemberメソッドを呼び出すと、コントロールの新しいインスタンスが作成されますか?

ポイントはすべて動作します。私が抱えている問題は、の前にというメソッドを呼び出すことです.1.n FileInfoオブジェクトを含むSilverlightコントロールにObservableCollectionを構築します。これはうまく動作し、ファイルを追加すると構築されます。ファイルを追加するたびに、メッセージボックスにSilverlightからのカウントが表示されます(つまり、「Count = 2」)。

問題:JSからメソッドDoSomething()を呼び出し、そのObservableCollectionにアクセスすると、count = 0!何が起こっているのか見るために、SilverlightコントロールのコンストラクタにJSから呼び出されたときに入力されたかどうかを確認するメッセージを入れました。実際にはにはがあり、コントロールを再作成しているようです。

この場合、私のObservableCollectionは、FileInfoコレクションを構築したのと同じコントロールインスタンスではないので、count = 0を持つことは意味があります。

私はコレクションを保存していますが、SilverlightからJSにメソッドを呼び出すだけで、コントロールを再作成して、その状態にアクセスすることを許可しないのはなぜですか?私は新しいコントロールを望んでいない、私はそのままそれを操作する必要があります。または、私はベースから外して、このbeahviorを引き起こすために間違った何かをしていますか?

思考?ありがとう!

+0

あなたはベースオフ間違いなくある私は、コード例では、このトピックと、このような状況の下の記事拡大についてブログ。あなたは明らかに何か悪いことをしていますが、コードの完全な欠如では、それが何であるかを言うことは不可能です。すべての関連するC#とjsコードを含めてください(それを短くしてください)。 – AnthonyWJones

答えて

0

登録されたインスタンスが原因であることが判明しました。 MSDNの例は型の新しいインスタンスの登録を示していますが、私の場合、問題を解決するページコントロール自体の実際のインスタンスが必要でした。

だから私のページの初期化が完了した時点で、私は以下のように現在ページのインスタンスを登録することができます:

HtmlPage.RegisterScriptableObject("SLControl", Me) 

これは、内のすべてのオブジェクトを含めることの現在の状態でコントロールにアクセスするためのJSから私を許可ObservableCollectionを必要に応じて追加します。

は、HTMLブリッジを介して通信するためのSilverlightコントロールの現在のインスタンスを取得します:
http://allen-conway-dotnet.blogspot.com/2012/03/get-silverlight-controls-current.html

関連する問題