2016-07-31 14 views
0

私はICarというインターフェースを持っていて、2つのクラスで実装されているとしましょう。 BMWおよびAudi。彼らは名前と内容(車の視覚化)を含んでいます。私は "BMW"と "Audi"という名前をつけてコンボボックスに列挙したいと思っています。したがって、ユーザーが名前を選択すると、オブジェクトのコンテンツが表示されます。これまで私がやったこと。同じインターフェースを継承するオブジェクトのリストを取得する方法は?

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はBMWとアウディ車の可視化を持っています。 MainModelクラスで

、XAMLで

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

xmlns:local="clr-namespace:WpfApplication1" 

<ComboBox ItemsSource="{Binding Cars}" DisplayMemberPath="Name" SelectedItem="{Binding SelectedCar, Mode=TwoWay}" /> 

しかし、私は、コンボボックス内の二つの値 "アウディ" と "BMW" が届きません。私が間違っていたかどうかを教えてください。

+2

答えを知っていませんが、インターフェイス(C#5?)内のフィールドを提供できるかどうかわからないので、ベストプラクティスはまず、CarというAbstractクラスを持つことです。 –

+0

Sidenote:コンテンツのインターフェイスも使用します。 –

+0

@OriRefael C#インターフェイスでプロパティを定義できます。参照:http://stackoverflow.com/questions/3754274/interface-class-with-getter-and-setter-in-c-sharp – Giggity

答えて

0

は、インタフェースを実装するクラスのリストを取得するには、次の

  • あなたはICar
  • は、そのアセンブリ内の型のすべてを取得する実装タイプのためで探すつもりだどのアセンブリ決定
  • ICarを実装するタイプを判別します。

次に例を示します。私はデモンストレーションのために、インターフェイス(ICar)と同じアセンブリ内のクラスを探しています。

0

Listの代わりにobservableCollectionを使用してください。

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;} 
    } 
} 
関連する問題