我在 2 个屏幕之间发布/处理消息时遇到一个问题。
我的情况是:
信使屏,是主屏,在聊天屏上发布,都是从屏。带有来自服务器的消息的 Messenger 视图模型句柄。
聊天屏幕可以在信使屏幕上发布消息。信使视图模型在服务器上发送此消息。
Messenger 类如下所示:
[Export("MessengerScreen", typeof(IMessengerViewModel))]
public class MessengerViewModel : Screen, IMessengerViewModel, IInitializable<Account>, IHandle<Rp>
{
// ...
[ImportingConstructor]
public MessengerViewModel(IPokecService service, IEventAggregator eventAgg)
{
_eventAgg = eventAgg;
_eventAgg.Subscribe(this);
}
//publish on slave screen
public void Publish(Rp rp)
{
_eventAgg.Publish(rp);
}
//handle msg from slave screen
public void Handle(Rp msg)
{
//send to server
}
}
从屏类如下所示:
[Export("ChatScreen", typeof(IChatViewModel))]
[PartCreationPolicy(CreationPolicy.NonShared)]
public class ChatViewModel : Screen, IInitializable<DetailData>, IHandle<Rp>
{
[ImportingConstructor]
public ChatViewModel(IEventAggregator eventAgg)
{
_eventAgg = eventAgg;
_eventAgg.Subscribe(this);
}
//publish only on messenger screen
public void Publish(Rp rp)
{
_eventAgg.Publish(rp);
}
//show message from published from messenger
public void Handle(Rp rp)
{
AddBlockToConversation(rp);
}
//if enter is pressed publish on messanger screen
public void SendRp(KeyEventArgs e)
{
if (e.Key == Key.Enter && !string.IsNullOrEmpty(RpText))
{
_yourRp.Time = String.Format("{0:yyyy-MM-dd HH:mm:ss}", DateTime.Now);
_yourRp.RpText = RpText;
AddBlockToConversation(_yourRp);
//publish on messanger screen
Publish(_yourRp);
}
}
}
我的问题是:
第一个问题是:
- 我从 ChatViewModel 类中调用方法 SendRp。
- 它在 ChatViewModel 中调用方法 void Publish(),
- 然后是从类 MessengerViewModel 调用方法 void Handle()
- 然后还从 ChatViewModel 类调用方法 void Handle()。
我不想在 ChatViewModel 类中调用方法 Handle()。为什么如果我从 ChatViewModel 向 MessengerViewModel 发送消息在 ChatViewModel 类中也称为方法 Handle?
我的第二个问题是:
我想仅在某些从属屏幕上从 MessengerViewModel 消息发布。
MessgerVieModel 有队列消息:{msg1, msg2, msg3, ..., msgN}
我想发布:
- 从屏幕 #1 上的 msg1。
- 从屏幕 #2 上的 msg2
- ...
- 从屏幕 #3 上的 msg3