2010-05-27 4 views
0

Je joue avec WPF et la liaison de données et je m'interroge sur ce qui suit. J'ai défini quelques PropertyGroupDescriptions, mais maintenant je me demande comment lire le PropertyName d'un IValueConverter. Est-ce possible?WPF - Obtenir PropertyName dans IValueConverter

+0

Quelle est votre utilisation? Que transmettez-vous au convertisseur? –

+0

Il est utilisé dans un DataGrid pour le regroupement. Je veux ajuster les en-têtes en fonction de sa propriété – Oxymoron

+0

qui ne fonctionne pas comme je l'espérais, tant pis :( – Oxymoron

Répondre

1

Vous ne pouvez pas. Le IValueConverter interface n'a aucune méthode qui prend la propriété en cours de conversion.

Il aurait été agréable d'avoir l'instance PropertyInfo ou PropertyDescriptor transmis aux méthodes Convert et ConvertBack, mais les concepteurs ne trouvez pas nécessaire. La seule solution consiste à définir l'implémentation IValueConverter dans le code, puis dans la construction de l'implémentation, vous pouvez passer la propriété à laquelle l'implémentation de l'interface IValueConverter est attachée.

+0

Je fais juste référence au convertisseur de la propertygroupdescription – Oxymoron

+0

qui ne fonctionne pas comme id veulent pourriez-vous élaborer plus sur votre solution? – Oxymoron

+0

@Oxymoron : Vous devrez le faire par le biais du code et utiliser les propriétés de la classe qui implémente IValueConverter pour indiquer la propriété sur laquelle vous utilisez le convertisseur de valeur. – casperOne

0

Il existe toujours un moyen peu onéreux de transmettre le nom via le ConverterParameter de la liaison, bien que ce ne soit pas vraiment une manière "propre" de le faire.

0

Peut-être que je devrais élaborer un peu plus. Je les groupes suivants dans mon XAML:

<CollectionViewSource x:Key="cvsTasks" Source="{StaticResource tasks}" Filter="CollectionViewSource_Filter" >    
      <CollectionViewSource.GroupDescriptions> 
       <PropertyGroupDescription PropertyName="ProjectName" /> 
       <PropertyGroupDescription PropertyName="TaskName" /> 
       <PropertyGroupDescription PropertyName="Complete" /> 
      </CollectionViewSource.GroupDescriptions> 

et

<TextBlock FontWeight="Bold" Text="{Binding Path=Name}"/> 

Maintenant, je veux un convertisseur à valled sur Nom, ce qui est bien, mais je ne veux que cela fonctionne réellement sur la propriété Achevée. Quelle serait la meilleure façon de faire cela?

je me retrouve avec le code fugly comme:

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
     { 
      if (value != null) 
      { 
       if (value.GetType().Equals(typeof(Boolean))) 
       { 
        return (bool)value ? "Complete" : "Active"; 
       } 
       if (value.GetType().Equals(typeof(String))) 
       { 
        return value as string; 
       } 
      } 
      return null; 
     } 

Semble, mal.

Questions connexes