【发布时间】:2016-07-31 08:25:58
【问题描述】:
假设我有一个名为ICar 的接口,它由两个类实现; BMW 和 Audi。它们包含名称和内容(汽车的可视化)。我想获取名称“BMW”和“Audi”并将它们列在 Combo Box 中。因此,一旦用户选择名称,对象内容就会出现。这是我到目前为止所做的。
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}" />
但我没有在组合框中获得“Audi”和“BMW”这两个值。请告诉我是否做错了什么。
【问题讨论】:
-
不知道答案,但我不确定您是否可以在接口(C# 5?)中提供字段,所以最好的做法是首先拥有一个名为 Car 的抽象类。
-
旁注:也为内容使用接口
-
@OriRefael C# 接口允许定义属性。参考:stackoverflow.com/questions/3754274/…
-
@Giggity 我认为这是使用接口的错误方式......尤其是在这种情况下。
-
@OriRefael 先生,您为什么认为这是错误的?你能解释一下吗