2

我有这样的模型

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

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

我需要在 UI 上绑定两个集合的联合。什么是最好的方法。ObservableCollection<IStudent> FromBoth;我正在考虑使用带有比较器的 LINQ 联合方法生成另一个属性。我的问题是

  1. 在 UI 上绑定三个集合可以吗?注意:我需要删除重复项,优先考虑excel中的数据。

  2. 在某些情况下,我需要从 DB 中选择一些数据而不是 excel。

例如:fromExcel 中的 name="hungrymind" 和 fromDB 集合中的 name="hungrymind 概念"。默认情况下,UI 上的网格应显示饥饿思维(Excel 优先),但如果用户从 UI 取消选中列(又名属性),则该列的数据优先级变为 DB,即 UI 应显示“饥饿思维概念”

应该采取什么方法来实现这一目标。我的方法是针对用户事件,从 FromDB 或 FromExcel 中为集合中的每个项目选择数据,并将其分配给 FromBoth 集合中的属性。由于有100多列,我不得不使用反射,但不会减慢性能吗?如果我避免反思,那么我必须为每一列编写一个方法。关于模式或方法的任何建议?

4

2 回答 2

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;
}
于 2012-06-09T17:00:13.270 回答
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)

尽管上述方法会降低性能,但您可以采用明天可能出现的任意数量的类型。

于 2012-04-23T06:37:37.937 回答