У меня есть простой отправитель сообщения («RecordStore»), который отправляет это сообщение:
public class RecordStoreUpdatedMessage
{
public BaseModel Model { get; set; }
public RecordStoreUpdatedMessage(BaseModel model)
{
Model = model;
}
}
// somewhere in RecordStore:
var item = new BaseModel();
Messenger.Default.Send(new RecordStoreUpdatedMessage(item));
Затем я получил приемник, который регистрирует обратный вызов для этого сообщения:
Messenger.Default.Register<RecordStoreUpdatedMessage>(this, msg => {
Debug.WriteLine("DataTreeItemViewModel: cought RecordStoreUpdatedMessage");
//Debug.WriteLine("and the current item is " + anything);
});
Пока все хорошо, запускается Debug.WriteLine, я могу получить все из RecordStoreUpdateMassage через 'msg'.
НО
как только я введу и использую локальный var (независимо от того, что) в обратном вызове получателя, ни один из Debug.WriteLines
больше не срабатывает (мне нужен этот локальный var, чтобы проверить, действительно ли обновленная запись влияет я или если я могу просто игнорировать это):
string anything = "Test";
Messenger.Default.Register<RecordStoreUpdatedMessage>(this, msg => {
Debug.WriteLine("DataTreeItemViewModel: cought RecordStoreUpdatedMessage");
Debug.WriteLine("and the current item is " + anything);
});
Результат: ничего. Нет ошибок, нет Debug.WriteLine.
Версии:
mvvmLight 5.4.1.1
.Net 4.6.1
Может быть актуально: отправитель и получатель живут в 2 разных проектах / сборках
Я изучил несколько вопросов, таких как Странное поведение с действиями, локальными переменными и сборкой мусора в MVVM light Messenger и mvvmlight Messenger странное поведение , но не нашел такой, который адресовал бы эта крошечная разница использования локального var.
Почти забыл задать конкретный вопрос ...:
Почему использование локального var мешает Messenger запускать обратный вызов? Что я могу сделать, чтобы иметь возможность использовать локальную переменную в обратном вызове?