前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C# WPF MVVM开发框架Caliburn.Micro常用功能指南②

C# WPF MVVM开发框架Caliburn.Micro常用功能指南②

作者头像
用户9127601
发布2022-01-13 08:27:45
7000
发布2022-01-13 08:27:45
举报
文章被收录于专栏:dotNET编程大全dotNET编程大全

这是Caliburn.Micro项目中最常用的约定和功能的快速指南。

01

事件连接

这会自动将控件上的事件关联到ViewModel上的方法。

常规约定:

代码语言:javascript
复制
<Button x:Name="Save">

这将导致按钮的单击事件调用ViewModel上的“Save”方法。

简短语法:

代码语言:javascript
复制
<Button cal:Message.Attach="Save">

这将再次导致按钮的“Click”事件调用ViewModel上的“Save”方法。

可以像这样使用不同的事件:

代码语言:javascript
复制
<Button cal:Message.Attach="[Event MouseEnter] = [Action Save]">

可以向方法传递不同的参数,如下所示:

代码语言:javascript
复制
<Button cal:Message.Attach="[Event MouseEnter] = [Action Save($this)]">

$eventArgs

将EventArgs或输入参数传递给操作。注意:对于保护方法,这将是null,因为触发器实际上没有发生。

$dataContext

传递ActionMessage附加到的元素的DataContext。这在主/详细场景中非常有用,在主/详细场景中,ActionMessage可能会冒泡到父VM,但需要携带要执行操作的子实例。

$source

触发要发送的ActionMessage的实际框架元素。

$view

绑定到ViewModel的视图(通常是用户控件或窗口)。

$executionContext

操作的执行上下文,其中包含上述所有信息及更多信息。这在高级场景中很有用。

$this

操作附加到的实际UI元素。在这种情况下,元素本身不会作为参数传递,而是作为其默认属性传递。

长语法

代码语言:javascript
复制
<UserControl x:Class="Caliburn.Micro.CheatSheet.ShellView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity" 
    xmlns:cal="http://www.caliburnproject.org"> 
    <StackPanel> 
        <TextBox x:Name="Name" />
        <Button Content="Save"> 
            <i:Interaction.Triggers> 
                <i:EventTrigger EventName="Click"> 
                    <cal:ActionMessage MethodName="Save"> 
                       <cal:Parameter Value="{Binding ElementName=Name, Path=Text}" /> 
                    </cal:ActionMessage> 
                </i:EventTrigger> 
            </i:Interaction.Triggers> 
        </Button> 
    </StackPanel> 
</UserControl>

此语法表达式对于Blend 比较友好。

02

数据绑定

这将自动将控件上的依赖项属性绑定到ViewModel上的属性。

常规约定:

代码语言:javascript
复制
<TextBox x:Name="FirstName" />

将导致TextBox的“Text”属性绑定到ViewModel的“FirstName”属性。

明确的写法:

代码语言:javascript
复制
<TextBox Text="{Binding Path=FirstName, Mode=TwoWay}" />

这是绑定属性的正常方式。

Event Aggregator 事件聚合器

事件聚合器上的三种不同方法是:

代码语言:javascript
复制
public interface IEventAggregator {  
    void Subscribe(object instance);  
    void Unsubscribe(object instance);  
    void Publish(object message, Action<System.Action> marshal);  
}

事件可以是一个简单的类,例如:

代码语言:javascript
复制
public class MyEvent {
    public MyEvent(string myData) {
        this.MyData = myData;
    }

    public string MyData { get; private set; }
}

原文标题:Caliburn.Micro Xaml made easy

原文链接:https://caliburnmicro.com/documentation/cheat-sheet

翻译:dotnet编程大全

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-12-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 dotNET编程大全 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 01
    • 事件连接
    • 02
      • 数据绑定
        • Event Aggregator 事件聚合器
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档