Учебная группа это - ViewModel или Model
У меня есть viewmodel, в которой лежит коллекция, которая должна отображать учебные группы.
В классе самой учебной группе лежат команды, отвечающие за ее ликвидацию, показа информации и изменении информации. Команды привязаны во view к button свойству command. В классе также лежат свойства отвечающие за название группы, кол-ва студентов, сами студенты(классы) и еще какие-нибудь свойства.
Такой класс является ViewModel или Model, правильно ли сформирован класс или все таки нужно вынести свойства в которых значения в отдельную Model и получится ViewModel с командами и в ней лежит Model(группы) получаемая через сервис Моделей.
Т.е. алгоритм такой:
- Нажимаю создать группу
- Ввожу данные о группе(название, кол-во студентов и т.д.)
- Создаю группу и внутри уже создается model группы, с данными, которая попадает во ViewModel или это Model с командами, и этот класс представляет элемент коллекции.
Или же все это в одном классе (команды и свойства), это будет ViewModel или Model, вопрос такой так как жизненным циклом объекта управляется через View и не ясно как воспринимать такой класс в контексте MVVM, подскажите)
Сервис:
public class DataService : IModelService
{
public ObservableCollection<Group> GetData()
{
Group group = new Group();
return group.GetData();
}
}
Главная ViewModel:
public class MainVM : ReactiveObject
{
public string Title { get; set; }
public int Count { get; set; }
public ObservableCollection<GroupVM> Groups {get; set;}
public ReactiveCommand<Unit,Unit> AddCommand { get; set;}
public ReactiveCommand<GroupVM, Unit>? InfoCommand { get; set; }
public ReactiveCommand<GroupVM, Unit>? DeleteCommand { get; set; }
IModelService _modelService;
public MainVM(IModelService modelService)
{
_modelService = modelService;
Groups = new ObservableCollection<GroupVM>();
foreach(var groupModel in modelService.GetData())
{
Groups.Add(new GroupVM()
{
Title = groupModel.Title,
Count = groupModel.Count
});
}
AddCommand = ReactiveCommand.Create(() =>
{
Groups.Add(new GroupVM()
{
Title = Title,
Count = Count
});
});
InfoCommand = ReactiveCommand.Create<GroupVM>(groupVM =>
{
infoGroup(groupVM);
});
DeleteCommand = ReactiveCommand.Create<GroupVM>(groupVM =>
{
deleteGroup(groupVM);
});
}
void deleteGroup(GroupVM group) => Groups.Remove(group);
void infoGroup(GroupVM group) => MessageBox.Show(group.Count.ToString(), group.Title);
}
ViewModel группы:
public class GroupVM : ReactiveObject
{
public string Title { get; set; } = string.Empty;
public int Count { get; set; }
}
Model группы:
public class Group
{
public string Title { get; set; } = string.Empty;
public int Count { get; set; }
public ObservableCollection<Group> GetData()
{
ObservableCollection<Group> groups = new ObservableCollection<Group>()
{
new Group(){ Title = "Группа 1", Count = 25},
new Group(){ Title = "Группа 2", Count = 30},
new Group(){ Title = "Группа 3", Count = 25},
new Group(){ Title = "Группа 4", Count = 20}
};
return groups;
}
}