WPF Validation of a DataGrid Cell only on Exit -


i have datagrid , have binded validationrules columns of datagrid. validation rules work fine except everytime type in cell, gets validated automatically. hoping achieve, validate cell after type enter or tab (or when focus leaves cell somewhere else).

for instance, right now, in 1 column, validating column check non-real numbers. when want type scientific notation '3.5e-4', fails right after type '3.5e' (the error says "3.5e not real number.").

the xaml datagrid (including datagrid rowstyle):

<datagrid x:name="mydgr" itemssource="{binding}" autogeneratecolumns="false" canuseraddrows="false" targetupdated="mydgr_targetupdated"> <datagrid.rowstyle>     <style targettype="{x:type datagridrow}">         <setter property="validationerrortemplate">             <setter.value>                 <controltemplate>                     <image source="resources/cancel.ico"                            tooltip="{binding relativesource={relativesource findancestor, ancestortype={x:type datagridrow}},path=(validation.errors)[0].errorcontent}" margin="0" width="11" height="11" />                 </controltemplate>             </setter.value>         </setter>     </style> </datagrid.rowstyle> <datagridtextcolumn  headerstyle="{staticresource horizontaldatagridcolheaderdefault}">     <datagridtextcolumn.header>         <textblock>a</textblock>     </datagridtextcolumn.header>     <datagridtextcolumn.binding>         <binding path="acol" notifyontargetupdated="true" updatesourcetrigger="propertychanged" mode="twoway">             <binding.validationrules>                 <data:myvalidationrule1 />             </binding.validationrules>         </binding>     </datagridtextcolumn.binding> </datagridtextcolumn> <datagridtextcolumn  headerstyle="{staticresource horizontaldatagridcolheaderdefault}">     <datagridtextcolumn.header>         <textblock>b</textblock>     </datagridtextcolumn.header>     <datagridtextcolumn.binding>         <binding path="bcol" notifyontargetupdated="true" updatesourcetrigger="propertychanged" mode="twoway">             <binding.validationrules>                 <data:myvalidationrule2 />             </binding.validationrules>         </binding>     </datagridtextcolumn.binding> </datagridtextcolumn> 

also, here 1 of validation rules:

public class myvalidationrule1 : validationrule {     public override validationresult validate(object value, cultureinfo cultureinfo)     {         var currentmainwindow = ((mainwindow) application.current.mainwindow);         if (value != null)         {             double proposedvalue;             if (!double.tryparse(value.tostring(), out proposedvalue))             {                 string errmsg = "'" + value + "' not real number.";                 var result = messagebox.show(errmsg, "error");                 if (result == dialogresult.ok)                 {                   currentmainwindow.tabcontrol.selectedindex = 0;                                   }                 return new validationresult(false, errmsg);             }              if (proposedvalue <= 0)             {                 string errmsg = "entered value must positive.";                 var result = messagebox.show(errmsg, "error");                 if (result == dialogresult.ok)                 {                   currentmainwindow.tabcontrol.selectedindex = 0;                                   }                 return new validationresult(false, errmsg);             }         }          // ok.         return new validationresult(true, null);     } } 

and so, question is, how make sure done typing value in cell (i.e. either pressing enter,tab, etc) before validation rule called?


Comments

Popular posts from this blog

python Tkinter Capturing keyboard events save as one single string -

android - InAppBilling registering BroadcastReceiver in AndroidManifest -

javascript - Z-index in d3.js -