2014-04-29 2 views
0

une fois de plus im bloqué avec la liaison de données dans WPF. Cette fois, c'est avec la RichTextBox.Problèmes avec les liaisons RichTexBox

Mon programme doit écrire son état actuel dans un RichTextBox. Pour que chaque objet a une variable où l'opération réelle effectuée sur il est écrit dans. (devrait conduire à une histoire du processus pour chaque objet)

j'ai donc une classe appelée « Message » où le texte (une ligne) et les mises en forme du texte sont stockées.

Maintenant, je veux lier une liste à la RichTextBox, en respectant la mise en forme stockée. Une liaison unidirectionnelle serait suffisante.

Mais je n'ai rien trouvé sur la façon de lier une liste de lignes à la zone RichTextBox et de mettre en forme certains.

Heres im classe en utilisant pour stocker les « lignes »:

[Serializable] 
class Message 
{ 
    [field: NonSerialized] 
    public event PropertyChangedEventHandler PropertyChanged; 

    protected virtual void OnPropertyChanged(string propertyName) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 

    private bool bold = false; 
    public bool Bold 
    { 
     get 
     { 
      return bold; 
     } 
     set 
     { 
      bold = value; 
      OnPropertyChanged("Bold"); 
     } 
    } 

    public bool italic { get; set; } 
    public bool Italic 
    { 
     get 
     { 
      return italic; 
     } 
     set 
     { 
      italic = value; 
      OnPropertyChanged("Italic"); 
     } 
    } 

    public bool landingInFront { get; set; } 
    public bool LandingInFront 
    { 
     get 
     { 
      return landingInFront; 
     } 
     set 
     { 
      landingInFront = value; 
      OnPropertyChanged("LandingInFront"); 
     } 
    } 

    public string messageLine { get; set; } 
    public string MessageLine 
    { 
     get 
     { 
      return messageLine; 
     } 
     set 
     { 
      messageLine = value; 
      OnPropertyChanged("MessageLine"); 
     } 
    } 

    Color textColor = Color.Black; 
    public Color TextColor 
    { 
     get 
     { 
      return textColor; 
     } 
     set 
     { 
      textColor = value; 
      OnPropertyChanged("TextColor"); 
     } 
    } 

} 

Je serais heureux pour un exemple avec ma propre classe. Ne doit pas être complet. Juste que je peux voir dans quelle direction il va et comment je mets les mises en forme dans le texte/faire la liaison.

Salutations

Sylus

Annexe: informations plus détaillées ce que je veux faire

J'ai un programme qui devrait gérer les commandes complète automatiquement. L'interface utilisateur présente un aperçu où l'utilisateur peut consulter les commandes réelles. Parce que les commandes doivent passer par différentes opérations, je veux voir quelles opérations sont déjà effectuées, si elles fonctionnent correctement, et ainsi de suite.

Si une commande est sélectionnée dans l'interface utilisateur, les informations détaillées sont affichées à l'écran. L'idée est de prendre l'objet de commande et de stocker l'état performant/exécuté dans l'objet lui-même. Cela conduirait à un aperçu et une histoire des opérations.

La sortie devrait ressembler à ça:

Order 1234 
Step 1 - Check Informations 
Done... 

Step 2 - Providing the neseccary items 
Item 1 - OK 
Item 2 - OK 
Item 3 - Missing 

Step 3 - Ordering missing items 
... 

et ainsi de suite.

Je souhaite implémenter la sortie dans les différentes étapes. J'ai une liste dans chaque objet de la commande. Donc, ce que je veux faire est d'ajouter des éléments de message à l'objet pendant qu'il est en cours. La liaison de données doit afficher les informations dans le cas où une nouvelle ligne (message) est ajoutée ou l'utilisateur sélectionne un autre ordre.

+0

Je ne comprends pas ce que vous voulez faire.Votre zone de texte affiche une ligne, quel est le point de liaison de données, obtenant réellement cette ligne d'un contrôle? – Kilazur

+0

RichTextBox doit afficher une liste de lignes. – SyLuS

Répondre

1

Vous devez utiliser un convertisseur pour transformer vos propriétés Message en texte formaté.

Par exemple

public class MessageConverter: IValueConverter 
    { 
    public object Convert(object value, Type targetType, object parameter, string language) 
    { 
     var message = (Message) value; 

     if(message.Italic) 
     { 
     var it = new Italic(); 
     it.Inlines.Add(new Run{Text = message.MessageLine}); 
     it.Inlines.Add(new LineBreak()); 

     return it; 
     } 
     else if(...) 
     { 
     ... 
     } 
     return ...; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, string language) 
    { 
     throw new NotImplementedException(); 
    } 
    } 

également RichTextBox est un peu bizarre avec une liaison. Je pense que vous devez trouver un meilleur contrôle fournit un texte de mise en forme.

Questions connexes