我正在构建一个silverlight应用程序。我的要求是让用户从更大的技能列表中选择适用于他们的一些技能。
表:候选人=> CandidateSkills; SkillsCategories =>技巧。我认为架构是自我解释的。前端将显示所有技能(分组到不同的类别),当候选人登录时,只有他选择的技能将显示在复选框中。相当简单。
我的问题:我是否将所有技能实体带到前端,然后获取CandidateSkill实体,循环显示它们并相应地设置复选框或者它们是更简单/更好的方式?
由于
答案 0 :(得分:1)
我建议构建一个用作ViewModel的类。该类至少应包含一个属性,以指示是否选择了该项,要显示的文本以及模型实体本身或其键。
您可以通过将所有技能的集合左键加入单个候选人的技能,并将IsSelected
设置为候选技能的非空测试结果,来创建一组视图模型对象。
然后,您可以直接绑定到ViewModel。
我有一个类似的情况(用户到权限而不是候选人技能)一次,我用this resource作为起点。我希望它有所帮助。
就我而言,我有一个“保存”按钮,点击后会运行一些代码隐藏代码来迭代所选项目并将它们提交给我的Web服务。在不了解您的数据和服务实施细节的情况下,我不会在细节上弄乱细节。
祝你好运!
讨论评论
这是一个伪LINQ过程,通过发出两个数据库调用来创建视图模型:
var userskills = database.CandidateSkills
.Where(cs => cs.UserId == someUserId)
.Select(cs => cs.SkillId)
.ToList();
var skills = from s in database.Skills
select new CandidateSkillViewModel()
{
Text = s.SkillName,
IsSelected = userskills.Contains(s.SkillId),
Value = s.SkillId
};
mylist.ItemsSource = skills;
这将为您提供可绑定的数据源。最终,使用此模式,您必须手动将选择/取消选择转换为插入/删除。对我来说,我在按钮单击的处理程序中执行此操作。我检索一组新的候选技能,遍历列表中的项目,并根据需要插入/删除CandidateSkill实例。
我意识到依赖于按钮单击以将我的viewmodel状态解析为数据库操作可能不会被纯粹主义者认为是完整的MVVM,但它对我有用。
我希望这会有所帮助。