c# - Access a Model class from a View without direct access to Model Layer -


i need create property in 1 of user controls of model type think must prevent direct access model layer view layer.

i have view model of model provide set of model objects...

  • setofa_usercontrol
  • setofa_viewmodel
  • a_model

i need property in user control:

public a_model selecteda { get; set; } 

one way create new view model following codes , use in user control:

// ------------ view model layer ------------  public class singlea_viewmodel: modela { }  // --------------- view layer ---------------  public singlea_viewmodel selecteda { get; set; } 

but i'm trying prevent new empty view model class inherit model above. correct?

what suggestions prevent direct access model layer , create property in user control???


edit 1:

i have 3 project:

  • view project
  • view model project
  • model project

i want know can prevent reference model project in view project or not....

i have selecteda property in view model , put logic in view model class , work in view but have selecteda property in usercontrol bind selecteda property in viewmodel class... need direct access model in usercontrol define property!

when have direct access model view codes this:

// ------------ model layer ------------ public class amodel { }  // ------------ view model layer ------------ public class setofa_viewmodel: inotifypropertychanged {     public amodel selecteda { get; set; }      public observablecollection<amodel> items     {         { return _items; }         set         {             _items = value;             onpropertychanged("items");         }     }      // other logic codes fill , keep selecteda value and.... }    // --------------- view layer --------------- public partial class myusercontrol : usercontrol {     public amodel selecteda {      { return (amodel)getvalue(selectedaproperty); }         set         {             var oldvalue = (amodel)getvalue(selectedaproperty);             if (oldvalue != value) setvalue(selectedaproperty, value);         }     }      public static readonly dependencyproperty selectedaproperty =         dependencyproperty.register(             "selecteda",             typeof(amodel),             typeof(myusercontrol),             new propertymetadata(onselectedavaluechanged));      public myusercontrol ()     {         initializecomponent();          const string name_of_property_in_vm = "selecteda";         var binding = new binding(name_of_property_in_vm) { mode = bindingmode.twoway };         this.setbinding(selectedaproperty, binding);     }      private static void onselectedavaluechanged(dependencyobject o, dependencypropertychangedeventargs e)     {         //------     }   } 

the above method work me , use but i'm trying delete direct access , reference model project in view project how can implement selecteda dependency property of amodel in user control?

some friends can access model project directly view project. want know correct ways, not possible ways...!


edit 2

when keep selecteda item in user control use in window this:

<usercontrols:myusercontrol x:name="myusercontrol1"/>  <label content="{binding elementname=myusercontrol1, path=selecteda.title}" /> 

edit 3

why want prevent direct access model viewmodel?

i searched mvvm diagrams , did not find , direct access view model. diagrams says:

enter image description here

..........enter image description here

now can direct access model view yet?

  • why there many samples have direct access model in view on web?

  • and why people can this?

  • if can , direct access model correct implement why there not relation between view , model in above diagrams???

a viewmodel not model should not derive.

if decide couple view model, change in model dictated external source, might affect views used in.

when using viewmodel each view views might not affected @ change , affected views can fixed either adjusting view or writing code in viewmodel.

yes, adding layer in between work comes clear point of transitioning view model , again. after couple of increments might worth it.

the layer provides nice point of extension commands , validation , view specific properties.

if decide expose model property of viewmodel can become tempting add properties , commands model view specific. pollute model , make model hard reused or regenerated.

there no law , there no police. take arguments consideration , pick option. try open change design later. appears easy right might become difficult later on. don't know happen; agile/flexible. in experience found applications survive many versions more efficient have clean separation between model , viewmodel short lived apps might much.

when implementing mvvm pattern make sure model doesn't know or assume viewmodel , viewmodel doesn't know or assume view. viewmodel man in middle; knows instances of model , where send changes of model. many times have used 1 or more repositories know how or save model instances viewmodel has know repository. repository can take care or delegate other features such caching across viewmodel instances.

in general create 1 viewmodel per view , assign instance of viewmodel datacontext of view. binding paths (for both properties , commands) relative viewmodel.

sometimes nest viewmodels adding properties main viewmodel viewmodels themselves.


Comments

Popular posts from this blog

Java 3D LWJGL collision -

spring - SubProtocolWebSocketHandler - No handlers -

methods - python can't use function in submodule -