Caliburn在WPF中向ViewModel传递事件和参数

本文介绍了如何在WPF中使用Caliburn框架将控件事件绑定到ViewModel进行处理。包括三种方法:1) 通过与控件名称一致的方法名直接触发;2) 处理控件的默认事件;3) 使用cal:Message.Attach语法传递事件源和事件参数。示例展示了如何在BtnClick方法中处理事件,并在ContextMenuOpening事件中传递$source和$eventArgs。
摘要由CSDN通过智能技术生成

一、和控件名称一致

WPF:

<Button x:Name="BtnClick" Content="打开窗口(无参)" Width="240" Height="30"/>

ViewModel:

public void BtnClick()

{

    //Do some thing;

}

二、控件默认事件

<Label x:Name="lbMessage" Content="{Binding Message}" cal:Message.Attach="NotifyMessageClick" HorizontalAlignment="Right" Margin="0,13,15,0" DockPanel.Dock="Right"></Label>
        

二、控件事件通用写法

WPF:

        <TreeView x:Name="Plans" DockPanel.Dock="Bottom"
                  ItemContainerStyle="{StaticResource PlanTreeView}"  ItemTemplate="{StaticResource PlanTreeItem}"
                  cal:Message.Attach="[Event SelectedIt
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Caliburn.Micro是一个轻量级的MVVM框架,它可以帮助我们更好地实现WPF应用程序的开发。下面是一些关于Caliburn.Micro框架的介绍和示例: 1.使用Caliburn.Micro实现MEF插件化开发,根据dll插件目录动态加载程序集和主程序的Tab页。 ```csharp // 在App.xaml.cs中添加以下代码 protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); // 创建插件管理器 var pluginManager = new PluginManager(); // 加载插件 pluginManager.LoadPlugins(); // 创建主窗口 var mainWindowViewModel = new MainWindowViewModel(pluginManager); // 显示主窗口 var mainWindow = new MainWindow(); mainWindow.DataContext = mainWindowViewModel; mainWindow.Show(); } ``` 2.CM框架搭建、事件发布与订阅、log打印、ioc容器、Conductor的用法,框架下的命名约定以及事件绑定、Emgucv进行模板匹配、右键菜单、单例模式等等。 ```csharp // ViewModelBase.cs public abstract class ViewModelBase : Screen { protected readonly IEventAggregator _eventAggregator; protected readonly ILog _logger; public ViewModelBase(IEventAggregator eventAggregator, ILog logger) { _eventAggregator = eventAggregator; _logger = logger; } // 发布事件 protected void Publish<TEvent>(TEvent @event) { _eventAggregator.PublishOnUIThread(@event); } // 订阅事件 protected void Subscribe<TEvent>(Action<TEvent> action) { _eventAggregator.Subscribe(action, ThreadOption.UIThread); } // 打印日志 protected void Log(string message) { _logger.Info(message); } } // ShellViewModel.cs public class ShellViewModel : Conductor<object>.Collection.OneActive { private readonly IWindowManager _windowManager; private readonly IEventAggregator _eventAggregator; private readonly ILog _logger; private readonly IContainer _container; public ShellViewModel(IWindowManager windowManager, IEventAggregator eventAggregator, ILog logger, IContainer container) { _windowManager = windowManager; _eventAggregator = eventAggregator; _logger = logger; _container = container; // 订阅事件 _eventAggregator.Subscribe(this); } // 打开新窗口 public void OpenWindow() { var viewModel = _container.Resolve<NewWindowViewModel>(); _windowManager.ShowDialog(viewModel); } // 关闭窗口 public void CloseWindow() { TryClose(); } // 处理事件 public void Handle(MyEvent @event) { // 处理事件 } } // ShellView.xaml <UserControl x:Class="MyApp.Views.ShellView" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:cal="http://www.caliburnproject.org" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" d:DesignHeight="450" d:DesignWidth="800"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="Auto" /> <RowDefinition Height="*" /> </Grid.RowDefinitions> <Menu Grid.Row="0"> <MenuItem Header="File"> <MenuItem Header="Open" cal:Message.Attach="OpenWindow" /> <MenuItem Header="Close" cal:Message.Attach="CloseWindow" /> </MenuItem> </Menu> <ContentControl Grid.Row="1" cal:View.Model="{Binding ActiveItem}" /> </Grid> </UserControl> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

目标Web3

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值