Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public abstract class SkillBase
- {
- // Common properties for all skills
- }
- public class WalkSkill : SkillBase
- {
- // Some properties
- }
- public class RunSkill : SkillBase
- {
- // Some properties
- }
- public abstract class EditSkillViewModel<T> : ViewModelBase where T : Skill
- {
- public abstract T Skill { get; protected set; }
- }
- [EditViewModelFor(typeof(WalkSkill))] // Attribute telling that this viewmodel should be instantiated when we want to edit a WalkSkill object
- public class EditWalkSkillViewModel : EditSkillViewModel<WalkSkill>
- {
- public override WalkSkill Skill { get; protected set; }
- public EditWalkSkillViewModel(WalkSkill skill)
- {
- Skill = skill;
- }
- }
- [EditViewModelFor(typeof(RunSkill))] // Attribute telling that this viewmodel should be instantiated when we want to edit a RunSkill object
- public class EditRunSkillViewModel : EditSkillViewModel<RunSkill>
- {
- public override RunSkill Skill { get; protected set; }
- public EditRunSkillViewModel(RunSkill skill)
- {
- Skill = skill;
- }
- }
- public static ViewModelBase GetEditSkillViewModel(this Skill skill)
- {
- var viewModelType = (from assembly in AppDomain.CurrentDomain.GetAssemblies()
- from type in assembly.GetTypes()
- where
- type.IsDefined(typeof(EditViewModelForAttribute)) &&
- type.GetCustomAttribute<EditViewModelForAttribute>().SkillType == skill.GetType()
- select type).SingleOrDefault();
- return viewModelType == null ? null : (ViewModelBase)Activator.CreateInstance(viewModelType, skill);
- }
- var editViewModel = selectedSkill.GetEditSkillViewModel();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement