2016-07-31 68 views
0

假设我有一个名为ICar的接口,它由两个类实现; BMWAudi。它们包含名称和内容(汽车的可视化)。我想获得名字“宝马”和“奥迪”,并将它们列入组合框。所以一旦用户选择对象内容应该出现的名称。这是我迄今为止所做的。如何获得继承相同接口的对象列表?

interface ICar{ 
    String Name {get;} 
    object Content{get;} 
} 

它是由两个类,AudiBMW继承。

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;}} 
} 

BMWCarAudiCar有宝马和奥迪车的可视化。

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}" /> 

但我没有得到这两个值 “奥迪” 和 “宝马” 组合框里面。请告诉我是否做错了什么。

+2

不知道答案,但我不知道你可以提供一个接口(C#5?)内的字段,所以最好的做法首先是有一个名为汽车的抽象类。 –

+0

旁注:还使用内容的接口 –

+0

@OriRefael C#接口确实允许定义属性。参考:http://stackoverflow.com/questions/3754274/interface-class-with-getter-and-setter-in-c-sharp – Giggity

回答

0

要获得其实现接口的类的列表:

  • 决定你在寻找实现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. 
0

请使用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;} 
    } 
}