c# - WPF: validation confirmed password -
i have 2 passwordboxes. need check passwords equal. don't want write condition [].xaml.cs code, want mark passwordbox in red when passwords aren't equal.
should write special validationrule, code in viewmodel or else? can me? validation written in [].xaml.cs want avoid it.
using:
<passwordbox name="tbpassword" /> <passwordbox name="tbpasswordconf" /> <passwordvalidator box1="{binding elementname=tbpassword}" box2="{binding elementname=tbpasswordconf}" />
code (this code not cover cases):
public class passwordvalidator : frameworkelement { static idictionary<passwordbox, brush> _passwordboxes = new dictionary<passwordbox, brush>(); public static readonly dependencyproperty box1property = dependencyproperty.register("box1", typeof(passwordbox), typeof(passwordvalidator), new propertymetadata(box1changed)); public static readonly dependencyproperty box2property = dependencyproperty.register("box2", typeof(passwordbox), typeof(passwordvalidator), new propertymetadata(box2changed)); public passwordbox box1 { { return (passwordbox)getvalue(box1property); } set { setvalue(box1property, value); } } public passwordbox box2 { { return (passwordbox)getvalue(box2property); } set { setvalue(box2property, value); } } private static void box1changed(dependencyobject d, dependencypropertychangedeventargs e) { } private static void box2changed(dependencyobject d, dependencypropertychangedeventargs e) { var pv = (passwordvalidator)d; _passwordboxes[pv.box2] = pv.box2.borderbrush; pv.box2.lostfocus += (obj, evt) => { if (pv.box1.password != pv.box2.password) { pv.box2.borderbrush = new solidcolorbrush(colors.red); } else { pv.box2.borderbrush = _passwordboxes[pv.box2]; } }; } }
also, it's possible define dependency property style of error , setting instead of borderbrush. don't know how use in case standard errortemplate.
Comments
Post a Comment