首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >控件模板中的ValidationRules

控件模板中的ValidationRules
EN

Stack Overflow用户
提问于 2011-09-05 17:50:30
回答 2查看 1.6K关注 0票数 5

我有从textbox继承的控件

代码语言:javascript
复制
public class MyTextBox : TextBox

这个有自己的风格

代码语言:javascript
复制
<Style TargetType="{x:Type Controls:MyTextBox}">

其中一个Setter是

代码语言:javascript
复制
<Setter Property="Template">

我希望能够将Binding.ValidationRules设置为模板中的某个值,从而影响此类型的textbox的所有实例。因此,我可以制作时间、日期、数字、邮政编码等文本框。或者我想要的任何东西

我不想每次创建文本框时都要设置验证规则。我只想说我想要一个NumericTextBox,并让它以模板中设置的任何方式进行验证。

这个是可能的吗?

到目前为止,我所看到的只是在控件的每个实例上设置的ValidationRules。

代码语言:javascript
复制
<TextBox x:Name="txtEMail" Template={StaticResource TextBoxErrorTemplate}>
<TextBox.Text>
    <Binding Path="EMail" UpdateSourceTrigger="PropertyChanged" >
        <Binding.ValidationRules>
            <local:RegexValidationRule Pattern="{StaticResource emailRegex}"/>
        </Binding.ValidationRules>
    </Binding>
</TextBox.Text>

(来自http://www.wpftutorial.net/DataValidation.html)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-06 11:53:08

我不确定是否有可能做你想做的事情。你可以在属性设置器中使用很多技巧(我不会依赖于此,因为它涉及到修改绑定,根据定义,绑定是动态的),或者使用隐藏的代码/自定义控件。

相反,我建议您将验证推到您的ViewModel中,可能使用IDataErrorInfo。有很多文章。这是我刚刚通过搜索"MVVM验证“找到的第一批验证之一:

MVVM - Validation

这样做将允许您使用标准的OO组合技术,因此您可以avoid repeating yourself :)

票数 1
EN

Stack Overflow用户

发布于 2011-09-06 00:10:31

如您所见,验证规则与绑定一起设置。我遇到了同样的问题,对我来说可行的解决方案是这样做:

代码语言:javascript
复制
    public MyTextBox()
    {            
        this.Loaded += new RoutedEventHandler(MyTextBox_Loaded);
    }

    void MyTextBox_Loaded(object sender, RoutedEventArgs e)
    {
        var binding = BindingOperations.GetBinding(this, TextBox.ValueProperty);
        binding.ValidationRules.Add(new MyValidationRule());
    }

这里的问题是要确保在添加验证规则之前设置了绑定,因此使用了Loaded,但我不确定这是否适用于所有场景。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7306371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档