Silverlight DataForm 和子集合有一个有趣的问题。我也有一个可行的解决方案,但感觉就像一个黑客(这是一个黑客),我想知道是否有人有一个更优雅的解决方案。
我有一个绑定到 GroupViewModels 集合的 DataForm。每个 GroupViewModel 都有一个用户视图模型的 ObservableCollection,我希望用户能够在显示 DataForm 的 EditTemplate 时添加和删除它。
用于执行此操作的 UI 是一个简单的 ComboBox,其中包含所有用户的列表和当前在组中的用户的 ListBox。有一个添加和删除按钮可将用户从一个列表移动到另一个列表。
现在,...... DataForm 绑定到的视图模型实现了 IEditableObject,......这很酷,因为如果取消编辑,我会得到回滚行为,但在这种情况下还不够。我需要一种方法来告诉 DataForm 我的 VM 是否处于脏状态。
由于我的 ViewModel 有一个 SelectedUserToAdd 属性,所有用户 ComboBox 的 SelectedItem 都绑定到该属性,因此当用户选择要添加的用户时,PropertyChanged 事件会在我的 VM 上触发,并且 DataForm 认为某些内容已更改并且提交(确定)按钮点亮。当 ListBox 中的选择因 SelectedUserToRemove 属性而改变时,它也会亮起。
显然,如果 ListBox 中的 UserViewModels 已更改,我想要的是让提交按钮亮起。
解决方案很简单。如果我从 SelectedUserToAdd 和 SelectedUserToRemove 属性中删除更改通知,我可以停止提交按钮亮起,并且我可以使用名为“Dirty”的虚拟属性让提交按钮亮起,当 AddUser 或 DeleteUser 命令获取时会引发 NotifyPropertyChanged被解雇了。
正如我所说,..它有效,但感觉不对。有人有更好的主意吗?
非常感谢提前。