Wpf 将可观察集合从基类强制转换为继承类

Wpf 将可观察集合从基类强制转换为继承类,wpf,c#-4.0,Wpf,C# 4.0,我正在编写一个WPF应用程序,目前正在将一些重用的代码重构为一个基础ViewModel类,我的其他ViewModel可以从中继承 此基类上的一个属性字段是 public class MessageParentBase { MessageParentBase() {} public string Name; } internal ObservableCollection<MessageParentBase> _GridData = new ObservableCollect

我正在编写一个WPF应用程序,目前正在将一些重用的代码重构为一个基础ViewModel类,我的其他ViewModel可以从中继承

此基类上的一个属性字段是

public class MessageParentBase
{
  MessageParentBase() {}

  public string Name;
}

internal ObservableCollection<MessageParentBase> _GridData = new ObservableCollection<MessageParentBase>();
该视图包含绑定到此GridData属性的数据网格,但应绑定到ChatMessage类的Message字段的列为空,并且会填充MessageParentBase类中的字段

因此,我假设视图不知道如何从MessageParentBase类转换到ChatMessage存在问题

我可否告知视图,对象将属于“ChatMessage”类型

我确实尝试将属性声明向上移动到继承的viewmodel,如下所示

public ObservableCollection<ChatMessage> GridData
    {
        get { return _GridData; }
        set { _GridData = value; }
    }
公共可观测收集网格数据
{
获取{return\u GridData;}
设置{u GridData=value;}
}
但这给了我以下错误:-

无法将类型“System.Collections.ObjectModel.ObservableCollection”隐式转换为“System.Collections.ObjectModel.ObservableCollection”

我是否需要在视图级别强制转换,或者我是否可以更改viewmodels以更好地实现这一点

如有任何建议,将不胜感激


Emlyn

将集合更改为:

public ObservableCollection<MessageParentBase> GridData { get; set; }
publicobservableCollection GridData{get;set;}
然后添加到构造函数中

this.GridData = new ObservableCollection<MessageParentBase>();
this.GridData=新的ObservableCollection();
由于WPF使用反射从数据上下文检索绑定数据,因此它应该能够获取存储在该集合中的派生类的值


此外,当您运行应用程序时,在选中“调试”的情况下检查输出窗口,XAML引擎将在那里输出所有绑定错误。

您的ViewModel应包含一个列表,其中包含网格将显示的类型(在本例中为ChatMessage类型)。您仍然可以使用继承来调用公共方法,但是绑定列表必须是ChatMessage类型

在视图级别强制转换是什么意思?您是否绑定基本viewmodel并希望显示ChatMessage属性?你的问题不清楚。向我们展示如何将视图模型绑定到视图。同时,展示messageParentBase类。就目前情况而言,你的问题很难理解。希望我的编辑能帮助你更多地解释我的问题。啊,我想情况就是这样。有什么方法可以让我在基类中有一些参考,因为我希望转移到这个类中的很多功能并不是为了寻找ChatMessage类和这个可观察的集合的特定部分。否则,对于使用MessageParentBase的不同派生类的每个viewmodel,我将有大量重复的代码。当您获得所选项时,将返回的对象将具有ChatMessage类型。由于该类继承自MessageParentBase,因此您可以正常访问其所有方法(我想这是您的疑问),我真正的问题是如何删除需要引用GridData observable集合的重复代码(但只对MessageParentBase类字段感兴趣)在ViewModel的基类中,同时仍然能够启动作为ChatMessage集合的可观察集合。我原以为我可以在基本viewmodel中声明字段,然后在派生的viewmodel中声明属性,但有人告诉我,即使一个类从另一个类继承,我也无法从一个ObservaleCollection隐式转换到另一个。我尝试过这种方法,但GridData被声明为ObservaleCollection()它仍然不显示派生类中的字段。
public ObservableCollection<MessageParentBase> GridData { get; set; }
this.GridData = new ObservableCollection<MessageParentBase>();