2
我有一个控件绑定到实现INotifyPropertyChanged的对象的索引属性。数据绑定到索引属性
问题是,我不知道如何通知该属性改变了该特定索引字符串的信号。
有人告诉我,我可以使用OnPropertyChanged(“”)来通知整个对象需要更改。
但我需要的是像OnPropertyChanged(“某些索引属性字符串”)。
有没有办法做到这一点?
非常感谢。
ps:
我想要做的是应用MVVM模式。 我使用viewmodel类来包装一个普通的POCO对象。所以,当我绑定,我绑定到[索引属性],以便我可以通知更改。这种方法可以节省我:
- 包装我需要的EVERY属性的内部域POCO对象。
- 通知在每个包装的属性中更改属性。
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;
}
你的意思是这个[字符串]或本[INT]? – benPearce 2010-11-08 08:30:29
我的意思是[字符串]。这个[string]和this [int]之间的数据绑定/通知变更有什么区别? – GaryX 2010-11-08 22:48:52
我最终为每个领域模型proeprty添加属性包装。事实证明,没有太多的工作。它避免了所有问题。无论如何,这是一次次的努力。 – GaryX 2010-11-11 22:38:23