如何获取继承相同接口的对象列表?

时间:2016-07-31 08:25:59

标签: c# wpf xaml

我们说我有一个名为ICar的接口,它由两个类实现; BMWAudi。它们包含名称和内容(汽车的可视化)。我想得到名字"宝马"和#34;奥迪"并将它们列在组合框中。因此,一旦用户选择了名称,就应该出现对象内容。这就是我迄今为止所做的。

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

但我没有得到这两个价值观&#34;奥迪&#34;和&#34;宝马&#34;在组合框内。请告诉我是否做错了。

2 个答案:

答案 0 :(得分:0)

请使用observableCollection而不是List。

#include <string>
#include <cstdlib>

std::uint8_t getNum(char hexChar)
{
    if(hexChar >= '0' && hexChar <= '9')
    {
        return hexChar - '0';
    }
    return (hexChar-'A'+10);
}

int main()
{
    std::uint8_t mac[6];
    std::string str = "01:23:45:AB:CD:EF";

    std::uint8_t j = 0;
    for(std::uint8_t i = 0; i<6; ++i)
    {
        mac[i] = getNum(str[j])*16 + getNum(str[j+1]);
        j+=3; // get to the next substring
    }
}

答案 1 :(得分: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.
相关问题