我有一个带有不同类型控件的表单,如文本框、下拉菜单、复选框、单选按钮等。所有这些控件都是在运行时从数据库动态加载的。
我想在有条件的基础上对文本框执行验证。例如,如果我们在下拉列表中选择了任何值,那么您必须在文本框中填写详细信息。否则不需要文本框详细信息。
我愿意使用数据库来执行此任务,并且我在我的项目中使用 MVVM 模式。
对此的任何帮助都将受到高度赞赏。
谢谢。
最佳答案
(我以评论开头,但结果太长了)。
理论上,您可以访问 ViewModel 中的所有这些控件及其值。
在不了解程序细节的情况下,很难提出任何有用的建议,但本质上,您需要从 ViewModel 中公开更多属性(可能是 bool 值),这些属性将根据控件中的值进行计算。然后,您需要将控件上的 IsEnabled 属性绑定(bind)到这些新属性。
听起来很简单,但我认为您有一些架构问题,这将使我难以实现我上面的建议。为了使它工作并在其他控件的内容更改时自动更新您的控件,您的 ViewModel 需要在每次更新这些 bool 属性之一时实现 INotifyPropertyChanged 并引发 PropertyChanged 事件。
我认为您尝试做的事情可以通过 ItemsControl 和 DataTemplates(也许还有 DataTemplateSelectors)来实现。这将允许您在 ViewModel 中存储“数据”(例如 List 或更具体的内容),而无需引用实际的控件,并且相关的 DataTemplates 将为您在 ViewModel 中拥有的不同数据类型添加正确的控件。
关于c# - 有条件地验证 Silverlight 中动态生成的控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21305071/