我有一个Silverlight控件,其中一个名为DoSomething()
的方法用<ScriptableMember()>
属性修饰。然后我从JavaScript中成功调用 这个方法并通过SL方面的一个消息框证明“方法被调用!”。
点就是一切正常。我遇到的问题是 previous 调用此方法我在包含1..n FileInfo
个对象的Silverlight控件上构建了一个ObservableCollection。这也可以正常工作,并在我向其添加文件时进行构建。每次添加文件时,消息框都会告诉我Silverlight的计数(即“Count = 2”)。
现在的问题是:当我从JS调用方法DoSomething()
并访问ObservableCollection时count = 0!为了看看发生了什么,我在Silverlight控件的构造函数中放置了一条消息,看看它是否在从JS调用时输入,实际上它确实并且似乎重新创建了控件。
如果是这种情况,我的ObservableCollection有一个count = 0是有意义的,因为它与构建FileInfo集合的控件实例不同。
那么我在世界上如何保留集合,以及为什么只是从Silverlight调用一个暴露给JS的方法,重新创建控件并且不允许我访问它的给定状态?我不想要一个新的控件,我需要按原样操作它。还是我偏离基地并做出其他错误导致这种行为?
思考?谢谢!
答案 0 :(得分:0)
事实证明,登记的实例是罪魁祸首。 MSDN示例显示了注册该类型的新实例,但在我的情况下,我需要页面控件本身的实际实例来解决问题。
因此,在我的页面初始化完成后,我可以注册当前页面的实例,如下所示:
HtmlPage.RegisterScriptableObject("SLControl", Me)
这允许我从JS访问控件的当前状态,其中包含ObservableCollection中的所有对象。我通过代码示例在这个主题上写了博客,下面的文章扩展了这种情况:
获取Silverlight控件的当前实例以通过HTML Bridge进行通信:
http://allen-conway-dotnet.blogspot.com/2012/03/get-silverlight-controls-current.html