从JavaScript对Silverlight控件调用ScriptableMember方法是否会创建该控件的新实例?

从JavaScript对Silverlight控件调用ScriptableMember方法是否会创建该控件的新实例?,silverlight,Silverlight,我有一个Silverlight控件,其方法名为DoSomething(),用属性修饰。然后,我成功地从JavaScript调用了这个方法,并通过一个小消息框证明了这一点,该消息框在SL端显示“methodcalled!” 关键点就是一切。我遇到的问题是,在调用此方法之前,我在Silverlight控件上建立了一个ObservableCollection,其中包含1..nFileInfo对象。这也可以很好地工作,并且随着我添加文件而增加。每次我添加一个文件时,一个消息框会告诉我Silverligh

我有一个Silverlight控件,其方法名为
DoSomething()
,用
属性修饰。然后,我成功地从JavaScript调用了这个方法,并通过一个小消息框证明了这一点,该消息框在SL端显示“methodcalled!”

关键点就是一切。我遇到的问题是,在调用此方法之前,我在Silverlight控件上建立了一个ObservableCollection,其中包含1..n
FileInfo
对象。这也可以很好地工作,并且随着我添加文件而增加。每次我添加一个文件时,一个消息框会告诉我Silverlight的计数(即“计数=2”)

现在的问题是:当我从JS调用方法
DoSomething()
并访问该ObservableCollection时,计数=0!为了查看发生了什么,我在Silverlight控件的构造函数中放置了一条消息,以查看它是否在从JS调用时被输入,并且确实是这样,并且看起来似乎是在重新创建控件

如果是这种情况,那么我的ObservaleCollection的count=0是有意义的,因为它不是我构建FileInfo集合的同一个控件实例

那么,我到底该如何保存集合,为什么要从Silverlight调用一个暴露于JS的方法,重新创建控件,而不允许我访问它的给定状态呢?我不想要新控件,我需要按原样操作它。还是我偏离了底线,做了其他错事导致了这场恶梦


想法?谢谢

原来注册的实例就是罪魁祸首。MSDN示例显示注册该类型的新实例,但在我的示例中,我需要页面控件本身的实际实例来解决问题

因此,在我的页面初始化完成时,我可以注册当前页面的实例,如下所示:

HtmlPage.RegisterScriptableObject("SLControl", Me)
这允许我从JS访问当前状态的控件,该控件根据需要包括ObservableCollection中的所有对象。我在博客上写了关于这个主题的代码示例,下面的文章对这种情况进行了扩展:

获取Silverlight控件的当前实例,以便通过HTML桥进行通信:

你肯定是跑垒了。你显然做错了什么,但是在完全没有任何代码的情况下,不可能说出那是什么。请包括所有相关的C#和js代码(尽量简短)。