Добавить зависимостьProperty в коллекцию? - PullRequest
0 голосов
/ 24 марта 2011

У меня есть класс, который наследует базовый Collection класс (ViewModel для dataGridRow)

Теперь я хотел бы добавить DependencyProperty к этому классу, чтобы я мог легко привязаться к нему. проблема в том, что Collection не является DependencyObject, поэтому я не могу использовать методы GetValue() и SetValue(), а C # не выполняет множественное наследование, поэтому я могу наследовать Collection, а также DependencyObject.

Есть ли простое решение для этого?

или у меня нет другого выбора, кроме как прибегнуть к простому Property, наследовать INotifyPropertyChanged и реализовать PropertyChanged?

Ответы [ 3 ]

2 голосов
/ 24 марта 2011

IMHO ViewModel должен никогда реализовывать DependencyObject, но вместо этого реализовывать INotifyPropertyChanged (INPC).

Привязка данных к свойствам зависимостей действительно быстрее, чем привязка к INPC, поскольку не требуется никакого отражения, но если вы не имеете дело с sh * tloads данных, это не будет проблемой.

Реализация DependencyObject предназначена исключительно для элементов пользовательского интерфейса, а не для чего-либо еще, а инфраструктура, поставляемая с DP, - это гораздо больше, чем просто уведомление об изменении. Классы ViewModel по определению не ориентированы на пользовательский интерфейс, поэтому наследование DependencyObject является запахом дизайна.

0 голосов
/ 06 апреля 2011

просто для того, чтобы закрыть этот вопрос, я соглашусь: «Нет, это невозможно».

Ответ Алекса предлагает интересную перспективу, но в моем случае и как указано в моемкомментарий, это не сделало бы ничего проще или более читабельным.

В конце концов, я реализовал INPC

0 голосов
/ 24 марта 2011

Использовать агрегацию вместо множественного наследования:

class MyCollection<T> : DependencyObject, ICollection<T>
{
    // Inner collection for call redirections. 
    private Collection<T> _collection; 

    #region ICollection<T> Members

    public void Add(T item)
    {
        this._collection.Add(item);
    }

    public void Clear()
    {
        this._collection.Add(clear);
    }

    // Other ICollection methods ... 
    #endregion

    #region MyProperty Dependency Property

    public int MyProperty
    {
        get
        {
            return (int)this.GetValue(MyCollection<T>.MyPropertyProperty);
        }
        set
        {
            this.SetValue(MyCollection<T>.MyPropertyProperty, value);
        }
    }

    public static readonly DependencyProperty MyPropertyProperty =
        DependencyProperty.Register("MyProperty",
            typeof(int),
            typeof(MyCollection<T>),
            new FrameworkPropertyMetadata(0));

    #endregion
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...