我有一个控件绑定(bind)到实现INotifyPropertyChanged的对象的索引属性

问题是,我不知道如何通知该特定索引字符串的属性更改信号。

有人告诉我可以使用 OnPropertyChanged(“”)来通知需要更改整个对象。

但是我需要的是 OnPropertyChanged(“Some index property string”)。

反正有做吗?

非常感谢。

ps:

我想做的是应用MVVM模式。
我使用viewmodel类包装普通的POCO对象。因此,当我绑定(bind)时,我绑定(bind)到[index属性],以便可以通知更改。这种方法使我免于:

  • 为我需要的每个属性包装内部域POCO对象。
  • 通知属性在每个包装的属性中都已更改。

  • 代码
    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;
    }
    

    最佳答案

    您不能为WPF中的特定索引绑定(bind)创建通知,只能通知所有索引绑定(bind):

    RaisePropertyChanged(Binding.IndexerName);
    

    哪个应该和:
    RaisePropertyChanged("Item[]");
    

    您可以使用 IndexerNameAttribute 覆盖此字符串。

    (在Silverlight中,您实际上可以在方括号内指定一个索引,以仅影响该特定绑定(bind)。)

    关于c# - 数据绑定(bind)到索引属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4121968/

    10-16 07:49
    查看更多