Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / обмен данными между несколькими Silverlight объектами на одной странице / 3 сообщений из 3, страница 1 из 1
04.03.2009, 16:19
    #35851284
RuBoris
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обмен данными между несколькими Silverlight объектами на одной странице
Добрый день всем!
Есть такой вопрос - как могут несколько SL объектов на одной странице обмениваться данными между собой.
Один способ конечно есть - делать обмен с помощью JavaScript, когда например один SL объект
делает вызов JS функции наподобие

HtmlPage.Window.Invoke("js_function_name", Parameter);

а JS функция js_function_name реализована как-то так:

<script type="text/javascript">
function js_function_name(parameter)
{
var control = document.getElementById("SilverlightControlId");
control.Content.RegisteredObjectName.MethodName(parameter);
}
</script>

RegisteredObjectName - объект, зарегистрированный с помощью метода HtmlPage.RegisterScriptableObject во втором SL объекте

Вопрос, можно ли как-нибудь обмениваться данными без использования JS?

Спасибо
...
Рейтинг: 0 / 0
04.03.2009, 17:21
    #35851481
SeVa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обмен данными между несколькими Silverlight объектами на одной странице
В CompositeWPF для этого есть EventAggregator - контейнер сообщений,который позволяет подписчикам и публикаторам быть независимыми друг от друга
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
//Подписываемся для получения сообщения
eventAggregator.GetEvent<TickerSymbolSelectedEvent>().Subscribe(ShowNews,
                                                      ThreadOption.UIThread);
//Обработчик
public void ShowNews(string companySymbol)
{
   articlePresentationModel.SetTickerSymbol(companySymbol);
}

//Raise event
EventAggregator.GetEvent<TickerSymbolSelectedEvent>().Publish(“STOCK0”);
...
Рейтинг: 0 / 0
05.03.2009, 14:13
    #35853333
RuBoris
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обмен данными между несколькими Silverlight объектами на одной странице
Спасибо большое SeVa за твою готовность помочь, но честно признаюсь, мне не хватило ума понять как мне может быть полезен EventAggregator.
я нашел такой способ, на всякий случай вкратце изложу, вдруг кому пригодится.

На HTML странице есть 2 Silverlight объекта, первый содержит элемент TextBlock с именем MyText, второй содержит кнопку с именем MyButton. Чтобы при нажатии на кнопку MyButton менялся текст в MyText можно SL объект с этим текстблоком объявить так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
using System.Windows.Browser;

public partial class Page : UserControl
    {
        public Page()
        {
             HtmlPage.RegisterScriptableObject("MyObject", this);
        }

        [ScriptableMember]
        public void SetText(string pText)
        {
            MyText.Text = pText;
        }
}

а во втором объекте обработчик нажатия на кнопку можно сделать таким:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
private void MyButton_Click(object sender, EventArgs e)
{
           // ctl01 - id первого SL объекта
           HtmlElement element = HtmlPage.Document.GetElementById("ctl01");
            ScriptObject content = (ScriptObject)(element.GetProperty("Content"));
            ScriptObject myObject = (ScriptObject)(content.GetProperty("MyObject"));
            myObject.Invoke("SetText", "Hello world");
}
...
Рейтинг: 0 / 0
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / обмен данными между несколькими Silverlight объектами на одной странице / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]