2010-07-05 5 views
1

J'ai un tas de blocs de texte dans un itemscontrol ... J'ai besoin de savoir comment souligner le texte dans le bloc de texte selon que le texte est disponible dans une liste dans le modèle de données.WPF: Modelage conditionnel du bloc de texte

cela semble très simple pour moi ... mais j'ai été googler depuis les 8 dernières heures ...

Puis-je utiliser datatriggers et valueconverters à cette fin? Si oui, alors comment puis-je exécuter la méthode qui se trouve dans viewModel (la méthode qui m'aide à vérifier si un texte existe dans la liste des modèles de données) ...

Même si je vais pour un modèle conditionnel. ... comment puis-je accéder à la liste qui se trouve dans mon modèle (le viewmodel peut le récupérer ... mais comment puis-je accéder au viewmodel?)

Cela devrait être une chose assez facile à faire .. .Am-je vraiment manqué quelque chose de très simple ici ?? :)

Je suivant le modèle MVVM pour mon application ..

+0

Je pense que vous devrez utiliser un convertisseur pour faire cela, sans convertisseur il me semble dur. – akjoshi

+0

oui ... j'ai écrit un convertisseur, mais je cudnt lier la liste à elle ... je ne veux vraiment pas brutaliser les choses .... là shud être un moyen plus facile ... –

Répondre

1

Une façon est d'utiliser un multivalueconverter qui est une classe qui implémente IMultiValueConverter. Un convertisseur multivaleur vous permet de lier plusieurs valeurs, ce qui signifie que vous pouvez obtenir une référence à la fois à votre viewmodel et au texte de votre TextBlock dans votre convertisseur de valeurs.

En supposant que votre viewmodel a une méthode appelée GetIsUnderlined qui renvoie true ou false indiquant si oui ou non le texte devrait souligner votre valueconverter peut être mis en œuvre le long de ces lignes:

class UnderlineValueConverter : IMultiValueConverter 
{ 
    #region IMultiValueConverter Members 

    public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     var viewmodel = values[0] as Window1ViewModel; 
     var text = values[1] as string; 
     return viewmodel.GetIsUnderlined(text) ? TextDecorations.Underline : null; 
    } 

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter,  System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 

    #endregion 
} 

Vous pouvez utiliser ce valueconverter dans la suivant la façon pour un TextBlock:

Questions connexes