Ok, tout d'abord, je suis nouveau à Silverlight et je cherche quelqu'un pour fournir des conseils quant à savoir si la solution suivante est la façon prescrite d'aller à ce sujet.Passer dynamiquement des paramètres de l'hôte ASPX à Silverlight 4 xaml code-behind
Hier, j'ai commencé à travailler sur un problème qui, à première vue, semblait assez simple et direct. Je dois passer quelques paramètres d'un code ASPX derrière, qui héberge une balise d'objet Silverlight, au code d'un ou de plusieurs contrôles utilisateur Silverlight dans l'application Silverlight hébergée.
Ainsi, après avoir fait quelques recherches, c'est la solution de base, j'ai développé ...
J'ai découvert qu'un attribut peut être ajouté à la balise d'objet appelé initParams, une liste délimitée par des virgules des noms et valeurs de paramètres peut être ajouté à cet attribut. Comme si ...
<object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
<param name="source" value="ClientBin/SampleApplication.xap"/>
<param name="onError" value="onSilverlightError" />
<param name="background" value="white" />
<param name="minRuntimeVersion" value="3.0.40624.0" />
<param name="autoUpgrade" value="true" />
<param name="initParams" value='DealerId=17' />
</object>
Cela est bien, sauf que le paramètre DealerId est essentiellement codé en dur dans la balise d'objet, pas réel utile. La prochaine chose que j'ai faite a été de remplacer cette étiquette d'objet par un contrôle littéral, et de mettre le texte du contrôle littéral dans le code-behind de la page à la valeur d'un StringBuilder (où j'ai construit la balise avec l'ajout dynamique de la valeur DealerId correcte). Dans l'exemple suivant, DealerId est codé en dur, mais vous avez l'idée.
var sb = new StringBuilder();
sb.Append(@"<object data=""data:application/x-silverlight-2,"" type=""application/x-silverlight-2"" width=""90%"" height=""80%"">");
sb.Append(@"<param name=""source"" value=""ClientBin/Ascend.SilverlightViewer.xap""/>");
sb.Append(@"<param name=""onError"" value=""onSilverlightError"" />");
sb.Append(@"<param name=""background"" value=""white"" />");
sb.Append(@"<param name=""minRuntimeVersion"" value=""3.0.40624.0"" />");
sb.Append(@"<param name=""autoUpgrade"" value=""true"" />");
sb.Append(@"<param name=""initParams"" value='");
sb.Append(@"ServiceUrl=");
sb.AppendFormat("http://{0}{1}", Request.Url.Authority, ResolveUrl("~/ReportService.svc"));
sb.Append(@",DebugMode=Full");
sb.AppendFormat(@",DealerId={0}' />", 40);
sb.Append(@"</object>");
litObjectTag.Text = sb.ToString();
Mon but, si cette conception initiale est sain d'esprit, est alors tirer cette création de balise d'objet dans un contrôle serveur, ce qui aura une propriété DealerId, qui à son tour sera situé dans les hôtes code-behind. À ce stade, l'hôte ajoute dynamiquement des valeurs de paramètre à l'attribut initParams de la balise d'objet, l'étape suivante consiste à obtenir ces valeurs et à les exploiter dans l'application Silverlight hébergée.
J'ai trouvé quelques articles pour vous aider; Je crée un dictionnaire public dans les App.xaml.cs, et le mettre dans l'événement Application_Startup ...
public IDictionary<string, string> InitConfigDictionary;
private void Application_Startup(object sender, StartupEventArgs e)
{
InitConfigDictionary = e.InitParams;
this.RootVisual = new MainPage();
}
Maintenant, je peux accéder à ce dictionnaire du public à partir du code-behind de tout utilisateur XAML contrôle, comme ceci ...
App app = (App) Application.Current; var dealerId = app.InitConfigDictionary ["DealerId"];
Cette conception fonctionne très bien, je suis juste à la recherche de conseils, étant donné que je suis nouveau à Silverlight. Encore une fois, l'implémentation fonctionne, mais il semble que tout un tas de travail est nécessaire pour transmettre une valeur dynamique de l'hôte aux fichiers .xaml.
Parce que je suis nouveau à Silverlight, j'espère que quelqu'un avec plus d'expérience peut dire que ce soit:
a) Patrick, vous êtes fou, pourquoi allez-vous à travers tout ce travail quand clairement Silverlight vous permettrait d'accomplir cela grâce à l'utilisation de "xxxxxx". B) Ouais, Patrick, c'est un frein, mais cette conception est fondamentalement ce que vous devez faire dans Silverlight.
Encore une fois, tout conseil qui pourrait être fourni serait très apprécié, merci. - PWK
Rakibul, Merci beaucoup pour la réponse, mais je cherchais vraiment des conseils de développeurs Silverlight expérimentés. Je comprends comment accomplir la tâche; Je me demande simplement si la méthodologie est en ligne avec la 'Silverlight-way' - Pattrick –