2012-04-22 53 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) 

虽然上面的方法降低了性能,但你可以通过任何数量的情况下,可能会在明天出现的类型。