Friday 15 January 2010

c# - ViewModel and Model and observing changes -



c# - ViewModel and Model and observing changes -

should viewmodels associated other viewmodels , interact them or should allowed interact models? or mix of both?

i'll seek more explicit code:

is code ok?

public class mainviewmodel { public mainviewmodel(ipeopleservice service) { var people = service.getpeople(); people = new observablecollection<personviewmodel>(people.select(p => new personviewmodel(p))); } public observablecollection<personviewmodel> people { get; set; } public personviewmodel selectedperson { get; set; } }

you see selectedperson viewmodel, not model.

a viewmodel can interact other viewmodels , not way did. in scenerio mainviewmodel depends on personviewmodel. wrong approach , should person model.

if want interact viewmodels , transfer info between them, should utilize mediator pattern. many popular mvvm frameworks have capability , it's called messenger service.

edit: here sample code. utilize mvvm light, can utilize whatever want.

public class mainviewmodel { public mainviewmodel(ipeopleservice service) { var people = service.getpeople(); people = new observablecollection<person>(people.select(p => new person(p))); } public observablecollection<person> people { get; set; } private person _person; public person selectedperson { { homecoming _person; } set { if(value != null) { _person = value; onpropertychanged("selectedperson"); //send selected person on each alter messenger.default.send<person>(_person); } } } }

in personviewmodel, should register messages type of person:

public class personviewmodel { private person _person; public person selectedperson { { homecoming _person; } set { if (value != null) { _person = value; onpropertychanged("selectedperson"); } } } public personviewmodel() { messenger.default.register<person>(this, (p) => { selectedperson = p; }); } }

c# design mvvm

No comments:

Post a Comment