2016-07-31 66 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;} 
    } 
}