C# 知道消息来自哪个订阅,在相同的视图模型中,相同的类型
我很难理解如何使用Caliburn Micro、事件聚合器实现这一点,我有一个视图模型,可以调用2个不同的窗口,在演示之前,我订阅了一个string类型的句柄,它可以工作,但现在我想知道在句柄方法中,subscribe从中得到了以下消息:C# 知道消息来自哪个订阅,在相同的视图模型中,相同的类型,c#,wpf,caliburn.micro,eventaggregator,C#,Wpf,Caliburn.micro,Eventaggregator,我很难理解如何使用Caliburn Micro、事件聚合器实现这一点,我有一个视图模型,可以调用2个不同的窗口,在演示之前,我订阅了一个string类型的句柄,它可以工作,但现在我想知道在句柄方法中,subscribe从中得到了以下消息: public void Causale() { var asm = Assembly.LoadFrom(@"V.M.Tabelle.Magazzino.Causale.dll"); var module = _s
public void Causale()
{
var asm = Assembly.LoadFrom(@"V.M.Tabelle.Magazzino.Causale.dll");
var module = _shell.LoadModule(asm);
if (module != null)
{
_eventAggregator.Subscribe(this);
module.Show("Add");
//_shell.CurrentView = (new ShellMenuItem { Caption = "Tiard", ScreenViewModel = module });
}
}
public void CausaleList()
{
var asm = Assembly.LoadFrom(@"V.M.Tabelle.Magazzino.Causale.dll");
var module = _shell.LoadModule(asm);
if (module != null)
{
_eventAggregator.Subscribe(this);
module.Show("List");
//_shell.CurrentView = (new ShellMenuItem { Caption = "Tiard", ScreenViewModel = module });
}
}
public void Handle(string message)
{
_eventAggregator.Unsubscribe(this);
BackValue = message;
NotifyOfPropertyChange(() => BackValue);
}
我已经申请了一个属性,比如subscribe(this).name(“”)
传递象令牌一样的东西
谢谢Eventaggregator将消息作为参数传递给订阅者 因此,您的方法是:
public void Handle(string message)
将收到“添加”或“列表”作为消息参数
该参数可以是您喜欢的任何类型。该类型可以是复杂类型,而不是值类型。事实上,通常最好为要发送的每种类型的消息定义一个类(类型),因为它是区分在引发任何消息时触发哪些处理程序的类型
在任何情况下,若字符串并没有足够的信息,您可以定义一个具有大量属性的类,并以这种方式传递任意多的参数。例如,可以使用具有模式和源属性的类Foo。模式为Add/List,来源为消息的来源。您可以创建包含消息和发件人信息的自定义类,然后订阅它,而不是订阅一种类型的字符串。比如说,
public class ActionMessage
{
public object Sender{get;set;}
public string Message{get;set;}
}
您现在可以将消息发布为
_eventAggregator.PublishOnUIThread(new ActionInvokedMessage { Message = "Add", Sender = this });
此发件人属性将包括邮件的源。您可以在处理事件时验证源的类型
public void Handle(ActionInvokedMessage message)
{
if(message.Sender is UserControl1ViewModel)
{
}
if(message.Sender is UserControl2ViewModel)
{
}
}