c# - Using Generics on Classes with Static DependencyProperty -


we looking @ creating helper class validation on devexpress wpf application single view model.

in our xaml, want add reference our validationservicehelper class:

<dxlc:datalayoutcontrol x:name="layoutcontrolmyobject" style="{staticresource entityview.datalayoutcontrol}"     viewmodel:validationservicehelper.haserrors="{binding relativesource={relativesource self}, path=(dxe:validationservice.hasvalidationerror)}"> 

the validationservicehelper class looks this:

namespace myapplication.viewmodels {     public partial class myobjectviewmodel :          singleobjectviewmodel<myobject, int, imyentityunitofwork>     {         // ...     }      public class validationservicehelper     {         public static bool gethaserrors(dependencyobject obj)         {             return (bool)obj.getvalue(haserrorsproperty);         }          public static void sethaserrors(dependencyobject obj, bool value)         {             obj.setvalue(haserrorsproperty, value);         }          public static readonly dependencyproperty haserrorsproperty =              dependencyproperty.registerattached("haserrors", typeof(bool),              typeof(validationservicehelper), new propertymetadata(false, onhaserrorschanged));          private static void onhaserrorschanged(dependencyobject d, dependencypropertychangedeventargs e)         {             try             {                 frameworkelement element = (frameworkelement)d;                 element.dispatcher.begininvoke(new action(() =>                      ((myobjectviewmodel)element.datacontext).viewhaserrors = (bool)e.newvalue));                 var err = validationservice.getvalidationerrors(d);                 if (err != null)                     element.dispatcher.begininvoke(new action(() =>                          ((myobjectviewmodel)element.datacontext).viewerrors =                      err.select(p => p.errorcontent).distinct().aggregate(                     (j, i) => string.format("{0}{1}{2}", i, environment.newline, j)).tostring()));             }             catch (exception ex)             {                 throw new exception(ex.message);             }         }     } } 

looking @ 2 dispatcher.begininvoke calls in onhaserrorschanged, see hard-coded cast myobjectviewmodel.

element.dispatcher.begininvoke(new action(() =>     ((myobjectviewmodel)element.datacontext).viewhaserrors = (bool)e.newvalue)); 

written this, need create different helper class. there way make generic, can use 1 class view models?

you derive view model classes common base class (or implement interface) viewerrors property defined , cast type:

var vm = element.datacontext baseviewmodel; if  (vm != null)     element.dispatcher.begininvoke(new action(() => vm.viewhaserrors = (bool)e.newvalue)); 

but never able cast datacontext other type actual type of object in memory. using generics 1 way or doesn't change fact.

and there no way cast singleobjectviewmodel<a, int, imyentityunitofwork> singleobjectviewmodel<b, int, imyentityunitofwork> because these 2 totally different types.


Comments

Popular posts from this blog

neo4j - finding mutual friends in a cypher statement starting with three or more persons -

php - How to remove letter in front of the word laravel -

minify - Minimizing css files -