要建立在一個職位,我在這裏看到:與多個類型單一組合C#列表
C# - Multiple generic types in one list
我想一個WPF DataGrid綁定到ClassAClassBCombinedList屬性是這樣的:
<DataGrid ItemsSource="{Binding ClassAClassBCombinedList.Data}" />
物業:
public List<CombinedClass> ClassAClassBCombinedList
{
get
{
List<CombinedClass> result = new List<CombinedClass>();
result.Add(new CombinedClass<ClassA>(new ClassA()));
result.Add(new CombinedClass<ClassB>(new ClassB()));
return result;
}
}
With CombinedClass定義爲:
public interface CombinedClass { }
public class CombinedClass<T> : CombinedClass where T : class
{
public CombinedClass(T classInstance)
{
Data = classInstance;
}
public T Data { get; private set; }
}
但是,這並不工作,因爲:
「CombinedClass」不包含對「數據」的定義和沒有擴展方法「數據」接受類型「CombinedClass」
您可以通過投射來訪問數據成員,但這會破壞這一點。
((CombinedClass<ClassA>)ClassAClassBCombinedList.First()).Data;
有關如何將列表與多個類類型組合並在WPF中綁定到他們的任何想法?
對不起我的鏈接是錯誤的,我已經更新了。我使用空的CombinedClass接口(這可能很容易就是一個抽象類)的原因。這樣我就可以在不指定類類型的情況下創建一個CombinedClass列表。如果兩個類都是從基類派生出來的,那麼我在這裏做的事情會很容易,但它們不是。 – SDK 2011-02-24 13:35:29
你是什麼意思,他們不是從一個基類派生。根據你的問題,他們是......他們來自CombinedClass。那是不正確的? – 2011-02-24 13:37:02
@SDK:你的問題是,你試圖將'ClassAClassBCombinedList.Data'綁定到'ItemsSource',你應該只綁定'ClassAClassBCombinedList'。在ListView中的DataTemplate中,您可以訪問屬性Data。 – 2011-02-24 13:38:19