2012-04-22 62 views
2

我有型號這樣覆蓋兩個收集 - 模式

interface IStudent { 
    string Name; 
    List<Subjects> Marks; 
    int RollNumber; 
} 

class ViewModel { 
    ObservableCollection<IStudent> FromExcel; 
    ObservableCollection<IStudent> FromDB; 
} 

我需要將這兩個集合的聯合綁定的UI。最好的方法是什麼。我正在考慮使用LINQ Union方法與比較器生成另一個屬性ObservableCollection<IStudent> FromBoth;。我的問題是

  1. 有三個集合綁定在UI上很好嗎?注意:我需要刪除重複項,優先考慮來自excel的數據。

  2. 我需要在某些情況下從數據庫中選擇一些數據而不是excel。

例如:fromExcel中的name =「hungrymind」和fromDB集合中的name =「hungrymind concepts」。默認情況下,UI上的網格應該顯示hungrymind(優先級爲excel),但是如果用戶從UI中取消選中列(aka屬性),則該列的數據優先級變爲DB,即UI應該顯示「飢餓概念」

應該採取什麼方法來實現這一點。我的方法是在用戶事件上,從集合中的每個項目中選擇來自FromDB或FromExcel的數據,並將其分配給FromBoth集合中的屬性。由於有超過100列,我不得不使用反射,但不會減慢性能?如果我避免反思,那麼我必須爲每一列寫一個方法。任何關於模式或方法的建議?

回答

2

我解決了問題,這樣的

interface IStudent { 
    string Name { get; set; } 
    List<Subjects> Marks { get; set; } 
    int RollNumber { get; set; } 
} 

class EntityViewModel: IStudent { 
    IStudent FromExcel; 
    IStudent FromDB; 
    public string Name { 
    get { return Choose("Name").Name; } 
    set { Choose("Name").Name = value; } 
    } 
    public string RollNumber{ 
    get { return Choose("RollNumber").RollNumber; } 
    set { Choose("RollNumber").RollNumber = value; } 
    } 
    internal IStudent Choose(string propertyName){ 
    if(IsOveridable(propertyName)) 
     return this.FromExcel; 
    else 
     return this.FromDB 
    } 
} 
class ViewModel{ 
    ObservableCollection<EntityViewModel> Entities; 
} 
0

在你爲什麼不建立一個元模型,這將有助於你在組織中的數據,例如像

String objectName 
String dataType 
String defaultName 
String displayName 
String userSelectedName 
boolean isUserOvverride 
String viewType // (i.e. Text Input, Combo Box, Text Area, Radio Button, Multi Line List) 
String viewElementTypeId // (i.e. for Combo Box,Radio Button this refers to user options available and for Text Input or Area it would be null) 

雖然上面的方法降低了性能,但你可以通過任何數量的情況下,可能會在明天出現的類型。