Silverlight 使用复选框选择项目
我正在构建一个silverlight应用程序。我的要求是让用户从更大的技能列表中选择一些适用于他们的技能 表:候选人=>候选人技能;SkillsCategories=>技能。我认为这个模式是不言自明的。前端将显示所有技能(分为不同类别),当候选人登录时,复选框中将仅显示其选定的技能。相当简单 我的问题:我是否将所有技能实体带到前端,然后获得候选技能技能实体,循环通过它们并相应地设置复选框,或者它们是一种更简单/更好的方法Silverlight 使用复选框选择项目,silverlight,mvvm,Silverlight,Mvvm,我正在构建一个silverlight应用程序。我的要求是让用户从更大的技能列表中选择一些适用于他们的技能 表:候选人=>候选人技能;SkillsCategories=>技能。我认为这个模式是不言自明的。前端将显示所有技能(分为不同类别),当候选人登录时,复选框中将仅显示其选定的技能。相当简单 我的问题:我是否将所有技能实体带到前端,然后获得候选技能技能实体,循环通过它们并相应地设置复选框,或者它们是一种更简单/更好的方法 谢谢我建议构建一个类用作ViewModel。该类应至少包含一个属性,以指示
谢谢我建议构建一个类用作ViewModel。该类应至少包含一个属性,以指示是否选择了项、要显示的文本以及模型实体本身或其键 您可以通过将所有技能集左键连接到单个候选人的技能,并将
IsSelected
设置为候选人技能的非空测试结果,来创建视图模型对象集
然后可以直接绑定到ViewModel
我曾经有过类似的情况(用户使用权限而不是候选人使用技能),我将其作为起点。我希望有帮助
在我的例子中,我有一个“保存”按钮,单击该按钮后,将运行一些代码隐藏代码来迭代所选项目并将它们提交给我的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;
这将为您提供一个可绑定的数据源。最终,使用此模式,您必须手动将选择/取消选择转换为插入/删除。对于我来说,我在按钮单击的处理程序中执行此操作。我检索一组新的候选技能,遍历列表中的项目,并根据需要插入/删除候选技能的实例
我意识到,纯粹主义者可能并不认为通过单击按钮将viewmodel状态解析为数据库操作就是完整的MVVM,但这对我来说是可行的
我希望这会有更多帮助。我建议构建一个类用作ViewModel。该类应至少包含一个属性,以指示是否选择了项、要显示的文本以及模型实体本身或其键 您可以通过将所有技能集左键连接到单个候选人的技能,并将
IsSelected
设置为候选人技能的非空测试结果,来创建视图模型对象集
然后可以直接绑定到ViewModel
我曾经有过类似的情况(用户使用权限而不是候选人使用技能),我将其作为起点。我希望有帮助
在我的例子中,我有一个“保存”按钮,单击该按钮后,将运行一些代码隐藏代码来迭代所选项目并将它们提交给我的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;
这将为您提供一个可绑定的数据源。最终,使用此模式,您必须手动将选择/取消选择转换为插入/删除。对于我来说,我在按钮单击的处理程序中执行此操作。我检索一组新的候选技能,遍历列表中的项目,并根据需要插入/删除候选技能的实例
我意识到,纯粹主义者可能并不认为通过单击按钮将viewmodel状态解析为数据库操作就是完整的MVVM,但这对我来说是可行的
我希望这能多帮点忙。谢谢你的建议。我应该提到我正在使用MVVM。我唯一担心的是,如果我将候选人技能和技能结合起来,我将失去对变化的跟踪。你知道这是不是真的吗?也许吧,不过你可以通过在视图模型上实现INotifyPropertyChanged来解决这个问题(部分方法)。好的-所以我从服务层获得了候选技能的集合(使用RIA服务)。在客户机代码中,我使用LINQ进行左外连接,并创建一个新集合,其中包含已连接的技能和技能类别。这些(查找)实体也需要服务层中的[Include]语句吗?这对我来说不起作用。问题可能是我已经迫不及待地加载候选项和候选项技能,并在GetCandidates调用中返回它们。一旦到了那里,我就很难将技能表连接到实体,因为我的LINQ技能还不够好!你好,@greg:我添加了一些根据我的解决方案改编的伪代码。我希望有帮助。谢谢你的建议。我应该提到我正在使用MVVM。我唯一担心的是,如果我将候选人技能和技能结合起来,我将失去对变化的跟踪。你知道这是不是真的吗?也许吧,不过你可以通过在视图模型上实现INotifyPropertyChanged来解决这个问题(部分方法)。好的-所以我从服务层获得了候选技能的集合(使用RIA服务)。在客户机代码中,我使用LINQ进行左外连接,并创建一个新集合,其中包含已连接的技能和技能类别。这些(查找)实体也需要服务层中的[Include]语句吗?这对我来说不起作用。问题可能是我已经迫不及待地加载候选项和候选项技能,并在GetCandidates调用中返回它们。一旦到了那里,我就很难将技能表连接到实体,因为我的LINQ技能还不够好!你好,@greg:我添加了一些根据我的解决方案改编的伪代码。我希望有帮助。