#45 - Comunicazione tra oggetti Silverlight nella stessa pagina
di Alessio Leoncini, in Silverlight 2.0, 23 aprile 2009
In Silverlight 2.0 è possibile mettere in comunicazione più oggetti della pagina appoggiandosi a specifiche funzioni Javascript definite nell'HTML.
La prima attività è definire nell'oggetto Silverlight che "riceve" la comunicazione un metodo che possa essere chiamato da una funzione Javascript:
public partial class Page3 : UserControl { public Page3() { InitializeComponent(); HtmlPage.RegisterScriptableObject("SLObject1", this); } [ScriptableMember] public void SetTextBlock1Text(string txt) { TextBlock1.Text = txt; } }
<script type="text/javascript"> function SetTextBlock1Text(txt) { var silverlightControlHost1 = document.getElementById("silverlightControlHost1"); silverlightControlHost1.Content.SLObject1.SetTextBlock1Text(txt); } </script> </head> <body> <div id="div1"> <object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="400" height="300" id="silverlightControlHost1"> <param name="source" value="ClientBin/SilverlightApplication1.xap" /> <param name="background" value="green" /> </object> </div> <div id="div2"> <object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="400" height="300"> <param name="source" value="ClientBin/SilverlightApplication2.xap" /> <param name="background" value="red" /> </object> </div> </body> </html>
Successivamente si predispone l'oggetto Silverlight "chiamante" ad invocare tale funzione SetTextBlock1Text attraverso il metodo Invoke della classe HtmlPage.Window:
private void Button_Click(object sender, RoutedEventArgs e) { Button button = sender as Button; string txt = String.Format("{0} è stato cliccato", button.Content); HtmlPage.Window.Invoke("SetTextBlock1Text", new string[] { txt }); }
Lo snippet è molto semplice: alla pressione di un Button viene passato come parametro alla funzione un testo corrispondente al nome dell'oggetto premuto, la funzione Javascript recupera l'istanza dell'oggetto a cui inviare l'informazione e la passa come parametro della specifica funzione "managed", precedentemente predisposta attraverso l'attributo [ScriptableMember].
Prendendo spunto da questo esempio è possibile costruire un piccolo modello di comunicazione maggiormente flessibile che possa estendersi anche a più oggetti contemporaneamente.
Approfondimenti
-
Disponibile Microsoft Expression Studio 3
-
Windows Phone 7 in arrivo: compatibilità con il passato, supporto a Silverlight e XNA
-
#64 - Blue Style TabControl per Silverlight 3.0
-
Real Code Day 4: La piattaforma Microsoft per lo sviluppo
-
HTML 5 vs RIA? Niente di nuovo
-
Speciale Siverlight 3.0 beta 1: primo contatto
-
Moonlight 2.0 in beta, con un po' di Silverlight 3.0 per Linux
-
#51 - Blue Style ComboBox per Silverlight 2.0
-
Gestire la sicurezza in Silverlight: un caso pratico
-
Silverlight 4.0: ancora più innovazione
-
#119 - Creare servizi WCF per applicazioni Silverlight
-
Silverlight 4.0 beta

















Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.