Внутри модели есть живой список устройств, у каждого устройства есть свои поля. Как оповещать список в VM, чтоб тот обновил View?
Обновление полей в этом списке смог сделать через INPC, но мне кажется это не лучшим вариантом, так как модель захламляется и не удается двоично сериализовать ее. Я вижу что необходимо написать дополнительную модель к существующим и в ней оповещать об изменениях, но тогда нужно подстроить логику чтоб работала с этими классами, а не с самой моделью.
Модель:
[Serializable]
public class Group
{
public string Name { get; set; }
public List<Computer> PCList { get; set; }
}
[Serializable]
public class Computer
{
public string Name { get; set; }
public bool Status { get; set; }
}
Логика:
public class Logic
{
private List<Group> _Groups;
public List<Group> Groups { get { return _Groups; } set { _Groups = value; } }
// code
public Logic()
{
// code
_Groups = LoadGroups();
_Server.Start();
}
private void ClientConnectedEvent(object sender, MyArgs e)
{
Computer comp = new Computer();
// code
_Groups[0].PCList.Add(comp);
}
}
VM:
public class MainWindowViewModel
{
public MainWindowViewModel()
{
Groups = new ObservableCollection<Group>(App.Logic.Groups);
}
public ObservableCollection<Group> Groups { get; set; }
}
Device(илиDeviceDto), который вы можете нормально десериализовать. А в VM будет классDeviceVMк которому будет привязываться View, со всеми INPC и прочим. Когда VM опрашивает модель, та ей возвращает списокDevice, и VM на его основе делает себе список уже изDeviceVM(ObservableCollection<DeviceVM>). Потом когда разберетесь можно будет подключить какой-нибудь маппер (например AutoMapper) и поручить работу по преобразованию модельных классов в Vm-ные ему (ну это уже по желанию, просто чтобы вы знали что есть такая возможность) – Андрей NOP May 10 '18 at 13:40