2010-07-31 18 views
0

Je me demande vraiment ce que je peux mettre dans le ViewModel.WPF/MVVM: RichTexBox en tant qu'éditeur de cellule DataGrid, mettez du code de formatage dans ViewModel?

Si elle est nécessaire à tester pourrait en dire ...

Mais lorsque les propriétés comme CaretPosition (pour obtenir le texte sélectionné) ne sont pas la dépendance

propriétés, alors mieux oublier le ViewModel.

Au moment où j'ai cela dans le behind:

private void rtbContent_SelectionChanged(object sender, System.Windows.RoutedEventArgs e) 
     { 
      RichTextBox rtb = sender as RichTextBox; 

      TextPointer tpForward = rtb.CaretPosition.GetNextContextPosition(LogicalDirection.Forward); 
      TextPointer tpBackward = rtb.CaretPosition.GetNextContextPosition(LogicalDirection.Backward); 

      if (tpForward != null && tpBackward != null) 
      { 
       DependencyObject nextObj = tpForward.GetAdjacentElement(LogicalDirection.Forward); 
       DependencyObject prevObj = tpBackward.GetAdjacentElement(LogicalDirection.Backward); 

       TextElement textElement = (TextElement)(nextObj ?? prevObj); 

       if (textElement != null) 
       { 
        tbBold.IsChecked = textElement.FontWeight == FontWeights.Bold; 
        tbItalic.IsChecked = textElement.FontStyle == FontStyles.Italic; 
        //... 
       } 
      }   
     } 

Ce code est le formatage du texte sélectionné, permet de basculer l'état du togglebutton lorsque le curseur est devant un char/a formaté les caractères mis en forme, comme dans mot ...

1.) À quel endroit appartient ce code? Code-behind ou ViewModel? En fait je connais la réponse à cause des restrictions techniques de la RTBox elle restera dans le code-behind.

2.) La logique pour activer les boutons de format se fait via

Mais cela ne fonctionnera pas comme le BoldCommand ne peut pas exécuter une méthode qui forme le texte sélectionné, comme le texte sélectionné de le RTB ne peut pas être lié au ViewModel ...

Comment faire face à cela?

MISE À JOUR:

service cloche dit:.

« Je suis ouvert à un code dans le code-behind, ... Je dessine la ligne à la logique de la décision que je sens un rat quand je vois une déclaration conditionnelle de toute sorte, c'est là que les bugs se reproduisent: la logique conditionnelle est un code que nous devrions tester. "

source: http://codebetter.com/blogs/wardbell/archive/2010/03/19/mvvm-josh-smith-s-way.aspx

Répondre

0

données va dans le modèle, l'interface utilisateur va dans la vue, et qui comprend le formatage du texte pour l'affichage. Maintenant, gardez à l'esprit que la vue peut également inclure du code-behind - il ne doit pas être strictement XAML.

+0

J'ai mis à jour mon article de départ avec un devis. – msfanboy

+0

celui-ci m'a aidé: http://stackoverflow.com/questions/1338951/wpf-richtextbox-replace-selected-text-with-custom-control voir la publication de IanR. – msfanboy