- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的问题要求我根据一些依赖关系来验证 View 模型中的各个字段。我正在使用Silverlight,Prism和MVVM。
作为示例(与我的实际情况有所不同):
每艘船可以有许多容器,一个容器可以有很多物品。
每个类都继承自NotificationObject
并在更改属性时调用RaisePropertyChanged
。
我的业务规则是确保在属性Ship.TypeId等于1时,Item.Colour,Item.Name和Item.Size不为空。如果Ship.TypeId等于其他任何值,则无需验证项目中的属性。
目前,正在OnPropertyChanged
事件中的 View 模型中进行验证。
我面临的问题是,如果我在Item类中添加验证,则该对象将不了解Ship.TypeId。如果我订阅了Item和Container抛出的PropertyChanged
事件,则可以从Ship内检测到属性更改,但只能获取属性名称(相对于子类,即Name),而没有新旧值。
我想做的是在知道Ship.TypeId是同时验证子项的同时,还要知道哪个Name,Color或Size属性已更改,并且能够针对UI上的正确字段引发错误。
非常感谢,
阿德里安
最佳答案
正如您所指出的那样,由于Item
对Ship
一无所知,因此不应进行涉及Ships的验证。可以在Item
中添加一个属性,该属性的确可以在本地进行验证(例如CanBeEmpty
),但在不了解更多信息的情况下,我无法说出是否有意义。
您没有指定编辑采用的格式,因此很难注释。如果可以在同一屏幕上实时编辑船和物品,则通过编辑物品或编辑船使验证失败。在这种情况下,我通常将验证推迟到通过单击“确定”或其他操作提交所有编辑之后。当您被迫一直保持有效时,对多个内容进行编辑确实令人沮丧。
如果您只能编辑与船隔绝的物品,而Item本身的多余属性没有意义,那么我建议将您的物品包装在一个了解船的ItemEditViewModel中。这似乎是合理的,因为创建有效的项目编辑需要船舶知识,因此在这种编辑屏幕中的ViewModels也需要船舶知识。
关于c# - 通过 View 模型图/树进行验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10205377/
所以我一直在尝试做的是使用我以前拥有的 TreeMap 并将其应用于此方法,在该方法中我将其转换为一个集合并让它通过 Map Entry Loop。我想做的是将以前的 TreeMap 反转为相反的(翻
我是一名优秀的程序员,十分优秀!