使用WPF进行数据绑定复杂对象模型
我正在努力重构一些用C#编写在WPF之上的旧代码。
我目前有一个复合用户模型,如下所示:
public class UserModel{ public User User {get; set;} public List Permissions {get; set;} }
在此模型中,权限列表是授予模型引用的用户的权限ID的列表。
在我的用户管理屏幕的xaml中,我有一个绑定到combobox的这些模型的列表,当选择更改时,所选项目绑定到包含User属性和Items Control的文本框的Grid。
当页面加载时,此项控件将填充绑定到系统中所有权限的复选框。 我的问题是将权限列表绑定到项目控件中的复选框的最佳方法是什么?
items控件的代码如下所示:
权限集合是此对象的List:
class SelectedPermission{ public Guid PermissionId {get; set;} public string Description {get; set;} public bool IsSelected {get; set;} }
我最初的想法是在SelectedPermission集合上实现INotifyPropertyChanged,当我绑定我的用户时,只需将IsSelected设置为true即可授予所选用户的任何权限。 但似乎应该有更好的方法。
我没有看到你的方法有什么问题,你基本上是创建一个ViewModel来包装权限。
但是,我会更进一步,定义一个Selectable ViewModel,它可以是您可能拥有的任何其他基于CheckBox的选择屏幕的通用解决方案:
public class Selectable: ViewModelBase //ViewModelBase should Implement NotifyPropertyChanged. { private T _model; public T Model { get { return _model; } set { _model = value; NotifyPropertyChange("Model"); } } private bool _isSelected; public bool IsSelected { get { return _isSelected; } set { _isSelected = value; NotifyPropertyChange("IsSelected"); } } }
然后你可以这样做:
public ObservableCollection> Permissions {get;set; } //etc.