私はICar
というインターフェースを持っていて、2つのクラスで実装されているとしましょう。 BMW
およびAudi
。彼らは名前と内容(車の視覚化)を含んでいます。私は "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
は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" が届きません。私が間違っていたかどうかを教えてください。
答えを知っていませんが、インターフェイス(C#5?)内のフィールドを提供できるかどうかわからないので、ベストプラクティスはまず、CarというAbstractクラスを持つことです。 –
Sidenote:コンテンツのインターフェイスも使用します。 –
@OriRefael C#インターフェイスでプロパティを定義できます。参照:http://stackoverflow.com/questions/3754274/interface-class-with-getter-and-setter-in-c-sharp – Giggity