2009-02-23 10 views
3

Im écrire une application WPF utilisant modèle MVVM, où Im limité à la liaison aux propriétés et aux commandes utilisation exclusiveModel View ViewModel dans WPF avec WebBrowser

Cependant, je veux utiliser le contrôle WebBrowser qui ne peut prendre une chaîne html pour le contenu en tant que paramètre d'une méthode, et non une propriété.

J'allais créer un nouveau contrôle dérivé de Webbrowser qui a la propriété requise, mais la classe de contrôle est scellée. J'ai essayé de créer un contrôle d'encapsulation, mais j'avais toutes sortes de problèmes avec les propriétés de dépendance qui semblaient résoudre plus de problèmes que je ne pourrais en être dérangé.

Y at-il un moyen de pousser un paramètre (chaîne) dans une méthode avec MVVM sans avoir recours au code dans les fichiers code-behind (ce qui est un grand non-non).

Merci

Dean

Répondre

5

Je ne suis pas tout à fait sûr que je comprends la question (que vous voulez appeler une méthode sur le navigateur Web, mais ont besoin d'une chaîne HTML pour le faire?). MVVM ne consiste pas à éviter le code-behind comme la peste autant que de reléguer les fichiers code-behind aux tâches strictement UI.

Si vous configurez votre interface utilisateur pour inclure un bouton Barre d'adresses + OK, vous devez utiliser le gestionnaire de clic des boutons pour transmettre la chaîne au navigateur. Alternativement, la chaîne pourrait être une propriété de ViewModel et vous pourriez la collecter facilement en la liant à la propriété Tag du WebBrowser.

Votre interface apparaîtra à peu près comme ceci:

<TextBox x:Name="addressBar" /> <!-- If you use the address bar --> 
<Button Content="Go" Click="NavigateButton_Click" /> 
<WebBrowser x:Name="browser" Tag="{Binding URL}" /> <!-- If you bind to a VM property --> 

Votre code-behind pourrait ressembler à ceci:

void NavigateButton_Click(object sender, RoutedEventArgs e) 
{ 
    browser.Navigate(new Uri(addressBar.Text)); // Address Bar 
    browser.Navigate(new Uri(browser.Tag.ToString()); // Tag Binding 
} 
15

Pourquoi un code dans les fichiers code-behind est-il non? Je crois que c'est l'un des malentendus les plus vus dans la communauté MVVM.

MVVM n'est pas un motif pour éliminer le code derrière. C'est pour séparer la partie vue (apparence, animations, etc.) de la partie logique (workflow). De plus, vous pouvez tester la partie logique.

Je connais suffisamment de scénarios dans lesquels vous devez écrire du code car la liaison de données n'est pas une solution à tout. exemples d'applications, utilisez le code derrière et remplir encore la séparation de MVVM se trouvent ici:

WPF Application Framework (WAF)

Questions connexes