MVVM Light Messeging проблема

1

Я использую MVVM Light Messenger в моем приложении WPF, и что-то не работает должным образом.

моя модель просмотра зарегистрирована с помощью токена. im, используя "длинные" объекты в качестве токенов. мой код, зарегистрированный, например, с токеном 5, затем отправляет запрос службе. когда служба отвечает, она обрабатывает мою вторую модель представления, которая затем отправит сообщение с тем же токеном.

Когда я отлаживаю и печатаю регистрацию и отправку сообщений, это кажется ОК, но по некоторым причинам не все мессенджеры принимаются зарегистрированным.

Моя регистрация и обработка выглядят следующим образом:

private void registerTest()
{
    long tokenId = getNextToken();
    ExtraData data = new ExtraData();
    Messenger.Default.Register<MyMsg>(this, tokenId, (m) => recieve(m,data));
}

private void receive(MyMsg m,ExtraData data)
{
    Messenger.Default.Unregister<MyMsg>(this, m.tokenId);
}

Моя передача выглядит следующим образом:

private void sendTest(long tokenId)
{
    Messenger.Default.Send(new MyMsg(tokenId), tokenId);
}

Я всегда регистрирую токен X до его получения в своем sendTest, но по какой-то причине иногда, когда вызывается sendTest (X), его не принимается.

Кто-нибудь знает, что происходит?

  • 0
    Как выглядит остальная часть вашего класса? Как вы вводите посланник?
  • 0
    проблемы, кажется, в лямбде в действии, если не использовать локальную переменную в лямбде, это будет работать. я нашел связанный пример здесь ссылку
Показать ещё 1 комментарий
Теги:
wpf
mvvm-light

1 ответ

0

Вы должны иметь свой ExtraData как свойство класса в своем сообщении, чтобы иметь возможность взаимодействовать с ним из разных источников.

public class MyMsg {
    public int TokenId {get;set;}
    public ExtraData Data {get;set;}
}


public void registerTest()
{
    Messenger.Default.Register<MyMsg>(this, recieve);
}

public void recieve(MyMsg myMsg)
{
    Messenger.Default.Unregister<MyMsg>(this, myMsg.TokenId);
    //Note that you can also access m.Data here if you need to
}


public void sendTest()
{
    var myMsg = new MyMsg {TokenId = GetNextToken(), Data = new ExtraData()};
    Messenger.Default.Send(myMsg);
}
  • 0
    Я только что сделал большое редактирование, потому что там была некоторая неприятность от написания кода в редакторе в стеке.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню