Я использую 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), его не принимается.
Кто-нибудь знает, что происходит?
Вы должны иметь свой 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);
}