Привязка данных к свойству индекса - PullRequest
2 голосов
/ 08 ноября 2010

У меня есть элемент управления привязка к свойству индекса объекта, который реализует INotifyPropertyChanged.

Проблема в том, что я не знаю, как уведомить сигнал об изменении свойства для этой конкретной строки индекса.

Мне сказали, что я могу использовать OnPropertyChanged ("") для уведомления о необходимости изменения всего объекта.

Но мне нужно что-то вроде OnPropertyChanged («Некоторая строка свойства индекса»).

В любом случае, сделать это?

Большое спасибо.

пс:

Я пытаюсь применить шаблон MVVM. Я использую класс viewmodel, чтобы обернуть обычный объект POCO. Поэтому, когда я связываюсь, я связываюсь с [индексным свойством], чтобы я мог уведомить об изменениях. Этот метод спасает меня от:

  1. Обернуть объект POCO внутреннего домена для КАЖДОГО свойства, которое мне нужно.
  2. Уведомлять свойство изменяется в каждом обернутом свойстве.

код

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;
}

1 Ответ

3 голосов
/ 14 июня 2011

Вы не можете создавать уведомления для определенных привязок индекса в WPF, вы можете только уведомить все привязки индекса:

RaisePropertyChanged(Binding.IndexerName);

Что должно быть таким же, как:

RaisePropertyChanged("Item[]");

Вы можетепереопределите эту строку, используя IndexerNameAttribute.

( В Silverlight вы можете указать индекс в скобках, чтобы он влиял только на эту конкретную привязку. )

...