我不知道正确的措辞来描述我在这里想做的事情......所以我只是展示它。
我知道这个 xaml 有效:
<TextBox>
<TextBox.Text>
<Binding Path="Location" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<domain:NotEmptyValidationRule ValidatesOnTargetUpdated="True"/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
Run Code Online (Sandbox Code Playgroud)
但这非常冗长。我想以类似的方式来做...
<TextBox Text={Binding Path=Location, UpdateSourceTrigger=PropertyChanged,
ValidationRules={domain:NotEmptyValidationRuleMarkup ValidateOnTargetUpdated=True}}"/>
Run Code Online (Sandbox Code Playgroud)
我创建了一个名为 的类NotEmptyValidationRuleMarkup,它返回 的实例NotEmptyValidationRule,并且它可以工作。项目构建得很好,运行得很好,一切都完全按照我的预期进行。但是,我无法再在设计器中查看我的窗口。它给了我一个无效标记错误,因为The property "ValidationRules" does not have an accessible setter.. 确实如此,ValidationRules 没有 setter。如果我尝试通过 C# 代码设置 ValidationRules,则会出现编译错误。但由于某种原因,当我在 XAML 中分配它时,它实际上确实构建并运行得很好。我很困惑。有没有一种方法可以让我在不提升窗口设计视图的情况下完成这项工作?