none
关于Validation数据验证的问题 RRS feed

  • 问题

  • 我的问题是这样的 就是使用Validation数据验证的时候 如何处理跟数据库交互的验证

    一般来说 验证分成2个种类

    1输入验证比如验证格式

    2数据验证比如是否重复

    在这种情况下 就拿一个用户名来说 1用户名不能为空 2用户名不能重复

    那么使用Validation验证的话如果要满足第一种验证,在属性中写上[必须输入]这种 就OK了

    但是要验证数据库重复 就必须和后台数据库做交互 但是写在属性中 每次出发CHANGE的时候都会去验证,这样如果网络不好的情况下,会响应很慢。

    那么 放到一个按钮出 比如一个提交按钮 OK 查找了下 我们可爱的MSDN 原来有 UpdateSourceTrigger=Explicit 属性 然后用

                BindingExpression beUsername = textBox1.GetBindingExpression(TextBox.TextProperty);
                beUsername.UpdateSource();

    这2句话手动触发。。。。。。。。。。。

    可是问题又来了 手动处罚后。。。。。。。。再次离开焦点 那个红色框 还是没有改变成为 原始的状态(也就是默认的未验证状态)

    但后我又开始寻找-。- 这次没有找到。。。。。。。。()

    以上是 前景。。。。。。。然后我就想问下 能否 手动的改变 比如textbox的 Validation状态么-。-

    就是不依赖 属性。。。。。。。也就是 不要绑定中 写NotifyOnValidationError=True, ValidatesOnExceptions=True, Mode=TwoWay,

    然后直接由于人工 后台自己 处理 比如我发现了textbox 是 必须 输入项。那我就唤醒Validation 告诉他 哪个 控件  出现什么 错误

    所以 总结下 问题 有2个

    1一个是 UpdateSourceTrigger=Explicit  后 如何 让控件变成未验证状态 就是红色框子的去掉!!

    2另一个是有没有办法手动的 不依赖 属性 直接 唤醒 textBox的 错误状态并且显示错误内容!!

    3第三个问题,这个问题跟上面的问题无关 就是 当SL跑在一个被放大了的页面中 Validation的浮动框被偏移!!就是大家可以44 如果你把你的页面 先打开一个首页 然后把IE页面倍数放大到150% 然后再进入那个输入页面 Validation就会出现偏移的现象!(重点在于进入编辑页面前一定是已经放大了,而不是进入后再放大)

    汗 写了好多 很罗嗦的样子 有哪位大侠 能帮帮我啊-。-

    谢谢

    2012年3月11日 4:03

答案

  • 你好,

    关于你的问题1和2,因为是绑定内置对验证的支持,有错误当然是会出现错误的状态,只有错误消除,那错误状态当然是也就自动去除。

    不过你要人工来修改这种状态也是可以的,使用VisualStateManager的GoToState 方法来过度到新的状态。

    比如你想要TextBox出现错状态,你可以这样来写:  VisualStateManager.GoToState(TextBoxName, "InvalidUnfocused", true);

    样式和模板你可以参考TextBox 样式和模板或者其它控件样式和模板

    对于你的第三个问题我倒没有重现,我把页面放大,并没有偏移(IE,Firefox,Chrome都没有你说的偏移现象)。


    Daoping Liu - MSFT

    2012年3月14日 3:15
    版主