Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Silverlight 使用复选框选择项目_Silverlight_Mvvm - Fatal编程技术网

Silverlight 使用复选框选择项目

Silverlight 使用复选框选择项目,silverlight,mvvm,Silverlight,Mvvm,我正在构建一个silverlight应用程序。我的要求是让用户从更大的技能列表中选择一些适用于他们的技能 表:候选人=>候选人技能;SkillsCategories=>技能。我认为这个模式是不言自明的。前端将显示所有技能(分为不同类别),当候选人登录时,复选框中将仅显示其选定的技能。相当简单 我的问题:我是否将所有技能实体带到前端,然后获得候选技能技能实体,循环通过它们并相应地设置复选框,或者它们是一种更简单/更好的方法 谢谢我建议构建一个类用作ViewModel。该类应至少包含一个属性,以指示

我正在构建一个silverlight应用程序。我的要求是让用户从更大的技能列表中选择一些适用于他们的技能

表:候选人=>候选人技能;SkillsCategories=>技能。我认为这个模式是不言自明的。前端将显示所有技能(分为不同类别),当候选人登录时,复选框中将仅显示其选定的技能。相当简单

我的问题:我是否将所有技能实体带到前端,然后获得候选技能技能实体,循环通过它们并相应地设置复选框,或者它们是一种更简单/更好的方法


谢谢

我建议构建一个类用作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:我添加了一些根据我的解决方案改编的伪代码。我希望有帮助。