2010-11-08 81 views
2

我有一個控件綁定到實現INotifyPropertyChanged的對象的索引屬性數據綁定到索引屬性

問題是,我不知道如何通知該屬性改變了該特定索引字符串的信號。

有人告訴我,我可以使用OnPropertyChanged(「」)來通知整個對象需要更改。

但我需要的是像OnPropertyChanged(「某些索引屬性字符串」)。

有沒有辦法做到這一點?

非常感謝。

ps:

我想要做的是應用MVVM模式。 我使用viewmodel類來包裝一個普通的POCO對象。所以,當我綁定,我綁定到[索引屬性],以便我可以通知更改。這種方法可以節省我:

  1. 包裝我需要的EVERY屬性的內部域POCO對象。
  2. 通知在每個包裝的屬性中更改屬性。

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

你的意思是這個[字符串]或本[INT]? – benPearce 2010-11-08 08:30:29

+0

我的意思是[字符串]。這個[string]和this [int]之間的數據綁定/通知變更有什麼區別? – GaryX 2010-11-08 22:48:52

+0

我最終爲每個領域模型proeprty添加屬性包裝。事實證明,沒有太多的工作。它避免了所有問題。無論如何,這是一次次的努力。 – GaryX 2010-11-11 22:38:23

回答

3

您不能創建在WPF特定索引綁定通知,您可以只通知所有索引綁定:

RaisePropertyChanged(Binding.IndexerName); 

這應該是一樣的:

RaisePropertyChanged("Item[]"); 

你可以用t覆蓋這個字符串他IndexerNameAttribute

在Silverlight實際上你可以指定括號內只指數影響特異性結合。