2017-02-23 50 views
0

我想使用Reflection來動態填充我的複選框。C#在每個反射的名稱空間中獲取類的列表

我發現了一個幫助回答here

,並用它在我的代碼:

public static List<System.Type> getModuleList() 
    { 
     // fill with all Classes in Timestamp.View.UserControls.ModuleView per Reflection 


     List<System.Type> theList = Assembly.GetExecutingAssembly().GetTypes() 
           .Where(t => t.Namespace == "Timestamp.View.UserControls.ModuleView") 
           .ToList(); 


     return theList; 
    } 

我充滿了我的複選框,如:

foreach (System.Type type in ModuleController.getModuleList()) 
     { 
      cbModule1.Items.Add(type); 
      cbModule2.Items.Add(type); 
      cbModule3.Items.Add(type); 
      cbModule4.Items.Add(type); 
     } 
  1. 現在我想創建一個SelectedType的新實例

    private void CbModule4_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
        ucModul4.Content = //new Instance of Selected Item 
    } 
    

我可以使用反射來創建一個新的實例,但我不知道如何。

  1. 我想給每個Class一個字符串,它將在複選框中顯示爲Item。這是可能的,還是我需要一個方法來通過它的字符串找到一個類?

編輯:我需要爭辯爲什麼我的問題從this one

不同所以首先這個問題只能解決我的問題之一,但我發現它較早,並沒有幫助我。我不知道如何獲得列表的類型,以及如何給班級一個別名。

+0

不要去爲了反映名稱空間,定義一個共享接口,因爲它們似乎都有一些共同之處,然後只是獲得實現此接口的類型。然後你可以用打字的方式填充你想要的屬性,大概他們會有一個標籤和一個檢查屬性 – Icepickle

+0

@Ippickle它們都有一個名爲IModuleView的共享接口。但是,我如何獲得實現此接口的所有類? – itskajo

回答

1

因爲添加Type到組合框使type.ToString(),並把字符串表示爲combobox,您可以使用

var instance = Activator.CreateInstance(Type.GetType(cbModule4.SelectedText))

當傳遞類型,你可以這樣做:

var instance = Activator.CreateInstance(theList[0]))

+0

我無法重寫type.ToString()正確嗎? – itskajo

+1

你可以使像ComboItem和它的實例幫助類成combobox – Nino

+0

好主意,謝謝:) – itskajo

相關問題