C# WPF“;收藏包括「;类型数据绑定
考虑以下(简化)模型: 我是否将C# WPF“;收藏包括「;类型数据绑定,c#,wpf,entity-framework,data-binding,C#,Wpf,Entity Framework,Data Binding,考虑以下(简化)模型: 我是否将AllRoles复制到并相应地设置IsChecked。绑定助手集合,并在保存模型之前,“手动”更新原始集合。但是,此解决方案引入了模型一致性问题。是否有一种方法可以绑定CurrentPerson.Roles,以便直接修改它(在db上下文中) 编辑:下面的评论中有一些很好的建议您可能需要使用值转换器,以便处理特殊绑定logic@GordonAllocman我不知道你到底是什么意思?我可以多绑定两个集合,但输出应该是单个集合-项目如何转换回?@GordonAlloc
AllRoles
复制到并相应地设置IsChecked
。绑定助手集合,并在保存模型之前,“手动”更新原始集合。但是,此解决方案引入了模型一致性问题。是否有一种方法可以绑定CurrentPerson.Roles,以便直接修改它(在db上下文中)
编辑:下面的评论中有一些很好的建议您可能需要使用值转换器,以便处理特殊绑定logic@GordonAllocman我不知道你到底是什么意思?我可以多绑定两个集合,但输出应该是单个集合-项目如何转换回?@GordonAllocman我看到的问题是,在转换中,我可以拥有两个集合,将其转换为ItemAndChecked类型的集合。但是在
object[]中返回(对象值,< /代码>将只返回要转换的ItEnand Stand集合,我不会有原始引用被更新,对吗?我会考虑编写一个引用角色的类,以及对目标人的角色集合的引用。调用它<代码> RoleVM < /代码>。“ObservableCollection,
Person`将拥有ObservableCollection
。当您设置RoleVM.IsSelected
时,设置者确保RoleVM
的角色是或不是(视情况而定),包括在该人的角色中。这并不像Gordon的想法那样纯粹是MVVM,但可能不会那么麻烦。有一些好的建议,遗憾的是现在(但今天晚些时候)无法验证。如果可能的话,请将这些建议作为答案(而不是评论)发布。
class Person {
List<Role> Roles { get; set; } //m:n navigation property
}
class PersonVM {
Person CurrentPerson { get; set; }
List<Role> AllRoles { get { return dbctx.Roles; } }
}
class ItemAndChecked<T>
{
public T Item { get; set; }
public bool IsChecked { get; set; }
}