简述
我想调用一个方法,该方法接受ObservableCollection<Base>
类型的参数,但我想使用ObservableCollection<Derived>
来调用它。它显示无法在两者之间进行转换。
详细描述
我想调用一个WPF窗口,在其中有一个将绑定到ObservableCollection
的ListBox。我希望该窗口显示一些基本信息,这些信息对于两个不同的类都是共同的。这些类是Derived1
和Derived2
,它们都基于一个BaseClass
。如果类型只是BaseClass
,我可以调用该方法,但我想通过列表传递参数。
因此,我有两个集合:
ObservableCollection<Derived1> A;
ObservableCollection<Derived2> B;
我希望能够调用像下面这样的方法,使用上述两个集合,这样我就不需要重复代码。
public void InitialiseWindow(ref ObservableCollection<BaseClass> List)
{
this.List=List;
}
但它会抛出一个错误:
cannot convert from 'ref System.Collections.ObjectModel.ObservableCollection<Derived1>' to 'ref System.Collections.ObjectModel.ObservableCollection<Base>'
我在这里
有没有更好的方法将集合绑定,使得Window
中所做的更改会反映在源代码上,而不是使用ref
?
解决方案
我修改了Window
的构造函数,将IEnumerable
转换为类型为ObservableCollection
的公共成员。由于窗口只会以模态窗口形式显示,因此该成员可在窗口关闭后访问。
public ObservableCollection<BaseClass> List;
public InitialiseWindow(IEnumerable<BaseClass> List)
{
InitializeComponent();
this.List=new ObservableCollection<BaseClass>(List);
}