我有一个继承基类Collection
类的类(dataGridRow的ViewModel)
现在,我想在此类中添加DependencyProperty
,以便我可以轻松地绑定到它。问题是:Collection
不是DependencyObject
所以我不能使用GetValue()
和SetValue()
方法,而C#不进行多重继承,因此我可以继承{{1} }以及Collection
。
有一个简单的解决方案吗?
或者我别无选择,只能使用简单的DependencyObject
,继承Property
并实施INotifyPropertyChanged
?
答案 0 :(得分:2)
恕我直言ViewModel 永远不会实现DependencyObject,而是实现INotifyPropertyChanged(INPC)。
DataBinding to Dependency Properties确实比绑定到INPC更快,因为不涉及反射,但除非你处理数据的sh * tload,否则这不会是一个问题。
实现DependencyObject严格用于UI元素,而不是其他任何东西,DP附带的基础结构不仅仅是更改通知。根据定义,ViewModel类不是面向UI的,因此继承DependencyObject是一种设计气味。
答案 1 :(得分:0)
使用聚合而不是多重继承:
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
}
答案 2 :(得分:0)
只是为了结束这个问题,我会满足于:“不,这是不可能的。”
亚历克斯的答案提供了一个有趣的视角,但就我而言,正如我的评论所述,这不会使任何事情变得更容易或更具可读性。
最后,我实施了INPC