65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIconstarIcon

5.00/5 (2投票s)

2012年9月7日

CPOL
viewsIcon

14607

downloadIcon

157

如何使用 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
    }
}   

最终项目结构如下所示:

Project Structure
© . All rights reserved.