Создает ли вызов метода ScriptableMember для элемента управления Silverlight из JavaScript новый экземпляр элемента управления? - PullRequest
0 голосов
/ 09 марта 2012

У меня есть элемент управления Silverlight с методом DoSomething(), украшенным атрибутом <ScriptableMember()>. Затем я вызываю этот метод успешно из JavaScript и подтверждается небольшим окном сообщения, которое появляется со стороны SL, на котором написано «Метод вызван!».

Точка - это все, что работает. У меня проблема в том, что до до вызова этого метода я создаю ObservableCollection в элементе управления Silverlight, содержащем 1..n FileInfo объекты. Это тоже хорошо работает и накапливается, когда я добавляю в него файлы. Каждый раз, когда я добавляю файл, окно сообщения сообщает мне счетчик из Silverlight (то есть "Count = 2").

Теперь проблема: когда я вызываю метод DoSomething() из JS и получаю доступ к этой ObservableCollection, count = 0! Чтобы увидеть, что происходит, я поместил сообщение в конструктор элемента управления Silverlight, чтобы посмотреть, будет ли оно введено при вызове из JS, и действительно делает и, по-видимому, воссоздает элемент управления.

Если это так, то в некотором смысле имеет смысл, что моя коллекция ObservableCollection имеет счетчик = 0, поскольку это не тот экземпляр элемента управления, в котором я собрал коллекцию FileInfo.

Так как же в мире сохранить коллекцию и зачем просто вызывать метод, предоставляемый JS из Silverlight, воссоздавать элемент управления и не разрешать мне получать доступ к его заданному состоянию? Я не хочу нового контроля, мне нужно манипулировать им как есть. Или я сошел с базы и делаю что-то еще не так, чтобы вызвать такое поведение?

Мысли? Спасибо!

1 Ответ

0 голосов
/ 28 марта 2012

Оказывается, зарегистрированный случай был виновником.Примеры MSDN показывают регистрацию нового экземпляра типа, но в моем случае мне нужен был сам экземпляр самого Page Control, который решил проблему.

Так что по завершении инициализации моей страницы я мог зарегистрировать текущий экземпляр страницы, как показано ниже:

HtmlPage.RegisterScriptableObject("SLControl", Me)

Это позволило мне из JS получить доступ к элементу управления в его текущем состоянии, которое включало все объекты в ObservableCollection по мере необходимости.Я написал в блоге об этой теме с примерами кода, и статья ниже раскрывает эту ситуацию:

Получение текущего экземпляра элемента управления Silverlight для связи через мост HTML:
http://allen -conway-dotnet.blogspot.com/2012/03/get-silverlight-controls-current.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...