Я создаю свое первое приложение, используя MVVM, и я застрял.Использование мессенджера для сообщения другим моделям представления о некоторых изменениях работало нормально, пока я не попытался создать наблюдаемую коллекцию объектов.У меня есть класс (myClass), который содержит список (innerList).Элементы innerLists должны отправить сообщение своему родителю (чтобы сообщить, что они изменились или должны быть удалены).Я отправляю сообщение от объекта innerList.Это сообщение зарегистрировано в myClass.
Проблема в том, что мне нужно создать ObservableCollection объектов myClass.Как я понимаю идею отправки-получения сообщений, каждый экземпляр myClass будет получать сообщение, отправленное из элемента innerList.Цель состоит в том, чтобы иметь возможность получать сообщение только в родительском объекте myClass, а не в каждом объекте myClass.
Структура, которую я описал, намного сложнее, так что это всего лишь набросок ситуации.Вопрос - можно ли отправить сообщение только родительскому объекту с помощью функции Messenger Send Register.Может быть, это нужно решить каким-то другим способом?
Ниже показано, как строятся два класса.Я сократил это только до того, что здесь важно.
public class ObjTypeListVM : ViewModelBase
{
private ObservableCollection<ObjTypeVM> objTypeList = new ObservableCollection<ObjTypeVM>();
public ObjTypeListVM()
{
Messenger.Default.Register<Messages.ObjTypeModifiedMsg>(this, ObjTypeModified);
}
public ObservableCollection<ObjTypeVM> ObjTypeList
{
get { return objTypeList; }
}
public void ObjTypeModified(Messages.ObjTypeModifiedMsg msg)
{
switch (msg.Type)
{...
case "delete":
Delete(msg.ObjType);
break;
default:
break;
}
}
public void Delete(ObjTypeVM objType)
{...
ObjTypeList.Remove(objType);
}
}
public class ObjTypeVM : ViewModelBase
{
private XmlSTSLib.ObjType objType;
int objTypeId;
private RelayCommand deleteItemCmd;
public ObjTypeVM(ObjType _objType, int _objTypeId)
{ ... }
public int ObjTypeId
{
get { return this.objTypeId; }
set { this.objTypeId = value; RaisePropertyChanged("ObjTypeId"); }
}
public RelayCommand DeleteItemCmd
{
get
{
if (deleteItemCmd == null)
{
deleteItemCmd = new RelayCommand(Delete);
}
return deleteItemCmd;
}
}
public void Delete()
{
Messenger.Default.Send<Messages.ObjTypeModifiedMsg>(new Messages.ObjTypeModifiedMsg(this, "delete"));
}
}