我正在使用MVVM框架创建WPF应用程序。
我有几个类都继承自基类" MessageParentBase"
public class ChatMessage : MessageParentBase
{
}
public class CargoMessage : MessageParentBase
{
}
ViewModels都从基类" ParentMessageWindowBaseViewModel"
再次继承public class UserControlChatViewModel : ParentMessageWindowBaseViewModel
{
}
public class UserControlCargoViewModel : ParentMessageWindowBaseViewModel
{
}
现在我要做的是在我的" ParentMessageWindowBaseViewModel"中有一个可观察的集合。类
abstract internal ObservableCollection<MessageParentBase> GridData
{
get; set;
}
这是什么,所以我可以在&#34; ParentMessageWindowBaseViewModel&#34; level,但是在子类中我希望声明一个更具体的集合
internal override ObservableCollection<ChatMessage > GridData
{
get { return _GridData; }
set
{
_GridData = value;
}
}
Visual Studio告诉我必须将其声明为&#34; MessageParentBase&#34;。
有人可以向我解释我是如何实现这一点的,因为我现在正在挣扎。
非常感谢你的帮助。
答案 0 :(得分:2)
ObservableCollection&lt; ChatMessage&gt; 与 ObservableCollection&lt;不同MessageParentBase&gt; 因此您无法覆盖它。
您可以这样使用:
public class MessageParentBase
{
}
public class ChatMessage : MessageParentBase
{
}
public abstract class ParentMessageWindowBaseViewModel<T> where T : MessageParentBase
{
abstract internal ObservableCollection<T> GridData
{
get;
set;
}
}
public class Child : ParentMessageWindowBaseViewModel<ChatMessage>
{
internal override ObservableCollection<ChatMessage> GridData
{
get;
set;
}
}
但是不能将所有Childs存储在1个列表中。所以它不会解决继承在泛型属性上的问题。
答案 1 :(得分:0)
在您声明属性 GridData
为 abstract
的类中,为什么还要引入支持字段< / em> _GridData
那里?不要那样做。
如果您希望该属性为abstract
,请不要在其中添加任何支持字段。如果要在“高”级别(基类)实现该属性,请从中删除abstract
修饰符。