我有这样的模型
interface IStudent {
string Name;
List<Subjects> Marks;
int RollNumber;
}
class ViewModel {
ObservableCollection<IStudent> FromExcel;
ObservableCollection<IStudent> FromDB;
}
我需要在UI上绑定两个集合的并集。什么是最好的方式。我正在考虑使用带有comparer的LINQ Union方法生成另一个属性ObservableCollection<IStudent> FromBoth;
。我的问题是
在UI上绑定三个集合是否可以?注意:我需要删除重复项,优先使用excel中的数据。
在某些情况下,我需要从DB中选择一些数据而不是excel。
例如:name =&#34; hungrymind&#34;在fromExcel和name =&#34;饥饿的概念&#34;在fromDB集合上。默认情况下,UI上的网格应显示hungrymind(优先级为excel),但如果用户从UI取消选中列(又称属性),则该列的数据优先级将变为DB,即UI应显示&#34; hungrymind概念&#34 ;
实现这一目标的方法应该是什么。我的方法是在用户事件上,从集合中为每个项目从FromDB或FromExcel中选择数据,并将其分配给FromBoth集合中的属性。由于有超过100列,我不得不使用反射,但不会降低性能?如果我避免反射,那么我必须为每一列编写一个方法。关于模式或方法的任何建议?
答案 0 :(得分: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;
}
答案 1 :(得分: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)
虽然上述方法会降低性能,但您可以采用明天可能出现的任何类型。