2010-11-08 21 views
2

J'ai un contrôle lié à une propriété d'index d'un objet qui implémente INotifyPropertyChanged.Liaison de données à la propriété d'index

Le problème est, je ne sais pas comment notifier le signal de modification de propriété pour cette chaîne d'index particulier.

On m'a dit que je peux utiliser OnPropertyChanged (« ») d'informer l'objet entier ont besoin d'être changé.

Mais ce dont j'ai besoin est quelque chose comme OnPropertyChanged ("Une chaîne de propriété d'index").

Y a-t-il un moyen de le faire?

Merci beaucoup.

ps:

Ce que je suis en train de faire est d'appliquer modèle MVVM. J'utilise une classe viewmodel pour envelopper un objet POCO normal. Donc, quand je lie, je lie à la [propriété d'index], de sorte que je peux notifier changé. Cette méthode me sauve de:

  1. envelopper l'objet POCO de domaine interne pour toutes les propriétés dont j'ai besoin.
  2. notifier la propriété modifiée dans chaque propriété enveloppée.

CODE

public class ViewModelEx<T_Self, T_Core> : ViewModelEx<T_Self> where T_Self : ViewModelEx<T_Self, T_Core> 
{ 
private static Type _s_coreType = typeof(T_Core); 
private static Dictionary<string, PropertyInfo> _s_corePropInfos = new Dictionary<string, PropertyInfo>(); 

private static PropertyInfo GetPropertyInfo(string prop) 
{ 
    if (_s_corePropInfos.ContainsKey(prop) == false) 
     _s_corePropInfos.Add(prop, _s_coreType.GetProperty(prop)); 

    return _s_corePropInfos[prop]; 
} 

public T_Core Core { get; set; } 

public object this[string propName] 
{ 
    get 
    { 
     return GetPropertyInfo(propName).GetValue(Core, null); 
    } 
    set 
    { 
     GetPropertyInfo(propName).SetValue(Core, value, null); 
     IsModified = true; 
     //RaisePropertyChanged(propName); 
     RaisePropertyChanged(""); 
    } 
} 

public R Val<R>(Expression<Func<T_Core, R>> expr) 
{ 
    return (R)this[Core.GetPropertyStr(expr)]; 
} 

public void Val<R>(Expression<Func<T_Core, R>> expr, R val) 
{ 
    this[Core.GetPropertyStr(expr)] = val; 
} 
+0

Voulez-vous dire ce [chaîne] ou ce [int]? – benPearce

+0

Je veux dire ceci [chaîne]. Quelle est la différence concernant la liaison de données/notification de changement entre cette [chaîne] et ce [int]? – GaryX

+0

Je finis par ajouter des wrappers de propriétés pour chacun des proeprty de modèle de domaine. Il s'avère qu'il n'y a pas trop de travail. Et cela évite tous les problèmes. Quoi qu'il en soit, c'est un effort unique. – GaryX

Répondre

3

Vous ne pouvez pas créer des notifications pour les liaisons d'index spécifiques à WPF, vous ne pouvez informer toutes les liaisons d'index-:

RaisePropertyChanged(Binding.IndexerName); 

qui devrait être le même que:

RaisePropertyChanged("Item[]"); 

Vous pouvez remplacer cette chaîne en utilisant t il IndexerNameAttribute.

(Dans Silverlight, vous pouvez réellement spécifier un index à l'intérieur des crochets pour n'affecter que la liaison spécifique.)