2009-08-18 9 views
3

J'ai un problème de performances qui lie une chaîne volumineuse à une zone de texte dans WPF.Liaison de TextBox à une chaîne volumineuse dans WPF à l'aide de MVVM

Dans la vue, je lie la propriété Text d'une TextBox à la propriété Output du modèle de vue, qui est un StringBuilder.

Vue:

<TextBox Text="{Binding Output, Mode=OneWay}" IsReadOnly="True"/> 

ViewModel:

public StringBuilder Output 
    { 
     get { return _output; } 
    } 

Comme le texte dans le StringBuilder obtient plus la performance des liants se dégrade.

Quelle est la meilleure façon de faire cela en utilisant MVVM?

+0

Quelle est la taille d'une chaîne? Y at-il une différence si vous changez 'Output' pour taper' string' et renvoyez '_output.ToString()' au lieu de retourner '_output' directement? –

Répondre

4

Une manière possible de contourner les retards dans la liaison de données consiste à utiliser une liaison asynchrone. Vous pouvez le faire en définissant la propriété isAsync de votre objet de liaison:

Ce sera bien sûr pas résolu le problème de la liaison prend beaucoup de temps mais arrêter l'interface utilisateur du gel alors qu'elle ne la liaison.

Vous pouvez également utiliser la liaison de priorité pour afficher une version réduite du texte (qui est rapide à charger) pendant le chargement de l'élément de texte plus volumineux. La liaison de priorité est décrite sur msdn ->http://msdn.microsoft.com/en-us/library/ms753174.aspx.

0

Je ne peux pas vraiment imaginer pourquoi la performance de la liaison serait lente car elle affiche simplement ce qui est dans le StringBuilder. Cependant, la première chose qui me vient à l'esprit est de savoir comment vous ajoutez à StringBuilder. L'ajout, le retrait, le remplacement ou l'insertion de caractères dans StringBuilder peut être à l'origine de problèmes de performances.

Je ne sais pas vraiment quel type de chaîne vous construisez ou quelles sont les exigences, mais vous devrez peut-être utiliser une structure différente.