如何获取继承相同接口的对象列表
本文关键字:接口 对象 列表 继承 何获取 获取 | 更新日期: 2023-09-27 17:59:18
假设我有一个名为ICar
的接口,它由两个类实现; BMW
和Audi
.它们包含名称和内容(汽车的可视化(。我想获得"宝马"和"奥迪"的名称,并将它们列在组合框中。因此,一旦用户选择名称,就应该显示对象内容。这是我到目前为止所做的。
interface ICar{
String Name {get;}
object Content{get;}
}
它由两个类继承,Audi
和BMW
。
class Audi : ICar{
AudiCar audi = new AudiCar();
String Name{get {return"Audi";}}
object Content{get {return audi;}}
}
class BMW : ICar{
BMWCar bmw = new BMWCar();
String Name{get {return"BMW";}}
object Content{get {return bmw;}}
}
BMWCar
和AudiCar
都有宝马和奥迪汽车的可视化。
在MainModel
课上,
Class MainModel{
List<ICar> cars;
ICar selectedCar;
MainModel(IEnumerable<ICar> cars){
this.cars = new List<ICar>(cars);
this.selectedCar = this.cars.FirstOrDefault();
}
IList<ICar> Cars {get{return this.cars;}}
public object Car{
get{ return this.selectedCar.Content;}
}
}
在 XAML 中,
xmlns:local="clr-namespace:WpfApplication1"
<ComboBox ItemsSource="{Binding Cars}" DisplayMemberPath="Name" SelectedItem="{Binding SelectedCar, Mode=TwoWay}" />
但我没有在组合框中获得两个值"奥迪"和"宝马"。请告诉我是否做错了什么。
获取实现接口的类的列表:
- 确定要在哪个程序集中查找实现
ICar
的类型 - 获取该程序集中的所有类型
- 确定哪些类型实现
ICar
。
下面是一个示例。为了演示,我正在寻找与接口(ICar
(相同的程序集中的类。
var assembly = Assembly.GetAssembly(typeof (ICar));
var typesInAssembly = assembly.GetTypes();
var matching = typesInAssembly
.Where(type => typeof(ICar).IsAssignableFrom(type) && !type.IsInterface);
// Checking !type.IsInterface or else it also returns ICar.
请使用observableCollection而不是List。
Class MainModel{
List<ICar> cars;
ICar selectedCar;
ShowData(IEnumerable<ICar> cars){
foreach (var car in cars)
{
_car.Add(car);
}
this.selectedCar = this.cars.FirstOrDefault();
}
private ObservableCollection<Car> _cars=new ObservableCollection<Car>();
public ObservableCollection<Car> Cars
{
get { return _cars; }
set { _cars= value; }
}
public object Car{
get{ return this.selectedCar.Content;}
}
}