[Caliburn.Micro] 将控制事件传递到 ShellView





5.00/5 (2投票s)
如何使用 Caliburn.Micro 将控制事件传递到 ShellView(主页面)?
引言
在 Caliburn.Micro 中,我们有一系列支持服务用于构建表示层。 其中包括 EventAggregator
,这是一种支持进程内发布/订阅的服务。 在这里我解释如何将事件从控制传递到主页面(ShellView
),以及如何在 ShellviewModel
中订阅事件(Publish
)。
让我们从查看 ItemClickEvent
类开始
首先添加 ItemClickEvent
类并编写代码
public string ToDoItemDescription { get; set; }
public ItemClickEvent(string toDoItemDescription)
{
ToDoItemDescription = toDoItemDescription;
}
创建 ItemClassEvent
类后,添加新的页面 PageOneView
,其中包含一个简单的按钮,并添加 PageOneViewModel
,其中包含按钮点击事件,如下所示:
public class PageOneViewModel : Conductor<screen>.Collection.OneActive
{
public void ClickMe()
{
IoC.Get<ieventaggregator>().Publish(new ItemClickEvent("Button Click"));
// Here you can pass your custom value and variable in ItemClassEvent().
}
}
最终 ShellViewModel
如下所示:
namespace EventPassingToShellView
{
[Export(typeof(IShell))]
public class ShellViewModel : Conductor<screen>
.Collection.OneActive, IShell, IHandle<itemclickevent>
{
public ShellViewModel()
{
ShowPageOne();
IoC.Get<ieventaggregator>().Subscribe(this);
}
public void ShowPageOne()
{
ActivateItem(new PageOneViewModel());
}
#region IHandle<itemclickevent> Members
public void Handle(ItemClickEvent message)
{
// Got message from PageOneViewModel what ever you pass it.
MessageBox.Show(message.ToDoItemDescription);
}
#endregion
}
}
最终项目结构如下所示:
