C# wpf编程CM框架快速入门项目实例

01

事件连接

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

常规约定:

<Button x:Name="Save">

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

简短语法:

<Button cal:Message.Attach="Save">

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

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

<Button cal:Message.Attach="[Event MouseEnter] = [Action Save]">

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

<Button cal:Message.Attach="[Event MouseEnter] = [Action Save($this)]">

长语法

<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上的属性。

常规约定:

<TextBox x:Name="FirstName" />

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

明确的写法:

<TextBox Text="{Binding Path=FirstName, Mode=TwoWay}" />

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

03


项目实例

前台XAML文件:

<Window x:Class="WpfApp8.StartView"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:cal="http://www.caliburnproject.org" xmlns:local="clr-namespace:WpfApp8"mc:Ignorable="d"Title="StartView" Height="300" Width="600" WindowStartupLocation="CenterScreen"><StackPanel><TextBox Name="TextContent"/><Button x:Name="testBtn" Content="testBtn"   Background="LightCyan"/><ListBox Name="ListBoxItems"  MinHeight="230" Background="LightGray"cal:Message.Attach="[Event SelectionChanged] = [Action ListBoxItems_SelectionChanged($source,$eventArgs)];[Event MouseUp]=[ListBoxItems_MouseUp($source,$eventArgs)]" /></StackPanel>
</Window>

后台viemmodel

using Caliburn.Micro;
using System.Collections.ObjectModel;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;namespace WpfApp8
{class StartViewModel : Screen{ public StartViewModel(){ListBoxItems = new ObservableCollection<string>() { };ListBoxItems.Add("dotNet编程大全");ListBoxItems.Add("Csharp编程大全");ListBoxItems.Add("dotnet工控上位机编程");}public ObservableCollection<string> ListBoxItems { get; set; }public string TextContent { get; set; }public void testBtn(){TextContent = "hello world!";NotifyOfPropertyChange(()=> TextContent);}public void ListBoxItems_MouseUp(object sender, MouseButtonEventArgs e){ListBox listbox = sender as ListBox;MessageBox.Show("当前操作的控件名称是:"+ listbox.Name);}public void ListBoxItems_SelectionChanged(object sender, SelectionChangedEventArgs e){TextContent = (sender as ListBox).SelectedItem.ToString();NotifyOfPropertyChange("TextContent");}}
}

04


运行结果

6bee4bb6df1298cb75ecbc906d3ecaaf.gif

05


源码下载

百度网盘链接:      

链接:https://pan.baidu.com/s/1G8aOfOnZ03dGyVFErUiB6Q

提取码:1314

小编微信:mm1552923   

公众号:dotNet编程大全      

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/293652.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

我的2021年终总结:初为人父,从头再来

【年终总结】| 作者/Edison最近公司开始一股年终总结浪潮&#xff0c;看着同事们写大作文式的“内卷”总结&#xff0c;我不禁在想我这一年做了什么&#xff0c;那么也就有了这篇总结推文&#xff0c;当然它也是我每年的习惯。传送门&#xff1a;Edison的2020年终总结1也谈2021…

Java 基础【09】你的多继承纳?

Java省略了许多很少用到&#xff0c;缺乏了解&#xff0c;混淆功能的C &#xff0c;在我们的经验中带来更多的悲伤大于收益 。 -----James Gosling James Gosling 这个人大家应该很熟悉&#xff0c;就是最初设计Java 语言的的程序…

开源项目导入eclipse的一般步骤[转]

下载到开源项目后&#xff0c;我们还是希望导入到eclipse中还看&#xff0c;这样要方便点&#xff0c;一般的步骤是这样的 打开源代码目录&#xff0c; 如果看到里面有.calsspath .project文件&#xff0c;那么说明这个项目本来就是eclipse开发的&#xff0c;那么在eclipse中-&…

说说可重复函数(Reentrant) 和线程安全(thread-safe)的区别与联系

在讲可重复函数与线程安全之前先来了解什么是可重复函数和线程安全。可重复函数&#xff1a;在多线程或有异常控制流的情况下,当某个函数运行到中途时,控制流(也就是当前指令序列)就有可能被打断而去执行另一个函数.而"另一个函数"很有可能是它本身.&#xff0c;如果…

Blazor中的无状态组件

声明&#xff1a;本文将RenderFragment称之为组件DOM树或者是组件DOM节点&#xff0c;将*.razor称之为组件。1. 什么是无状态组件如果了解React&#xff0c;那就应该清楚&#xff0c;React中存在着一种组件&#xff0c;它只接收属性&#xff0c;并进行渲染&#xff0c;没有自己…

一次性撤稿70篇!中国学者论文再现大规模撤稿 | 附全名单

全世界只有3.14 % 的人关注了爆炸吧知识2021年1月20日&#xff0c;英国皇家化学学会&#xff08;Royal Society of Chemistry&#xff0c;简称RSC&#xff09;表示&#xff0c;他们正在考虑撤回68篇可能出自“论文工厂”的文章&#xff0c;但当时并没有公布这68篇文章的详情。近…

二叉树前序、中序、后序遍历相互求法

今天来总结下二叉树前序、中序、后序遍历相互求法&#xff0c;即如果知道两个的遍历&#xff0c;如何求第三种遍历方法&#xff0c;比较笨的方法是画出来二叉树&#xff0c;然后根据各种遍历不同的特性来求&#xff0c;也可以编程求出&#xff0c;下面我们分别说明。 首先&…

搭建SVN服务

SVN版本管理工具管理着随时间改变的各种数据像普通文件服务器或者ftp服务器&#xff0c;但是&#xff0c;SVN会备份并记录每个文件每一次的修改记录Subversion官网&#xff1a;http://subversion.tigris.org/http://subversion.apache.org/svn客户端&#xff1a; http://tortoi…

MegaCli 监控Raid状态

MegaCli是一款管理维护硬件RAID软件&#xff0c;可以通过它来了解当前 raid卡的所有信息&#xff0c;包括 raid卡的型号&#xff0c;raid的阵列类型&#xff0c;raid 上各磁盘状态&#xff0c;等等。通常&#xff0c;我们对硬盘当前的状态不太好确定&#xff0c;一般通过机房人…

研究表明,胸大无脑是不存在的......

1 求车主心里阴影面积▼2 不管成不成功大叔是你坚实的后盾▼3 小岳岳的“全球分鹏”▼4 胸大无脑是不存在的&#xff01;▼美国芝加哥大学曾对1200名女性进行实验&#xff0c;胸部丰满女性在智商测试中的平均得分反而比胸部扁平的女性高出了10分。5 你也是个逻辑鬼才▼6 想…

每日一小练——按字典顺序列出全部子集

上得厅堂&#xff0c;下得厨房&#xff0c;写得代码&#xff0c;翻得围墙&#xff0c;欢迎来到睿不可挡的每日一小练&#xff01; 题目&#xff1a;按字典顺序列出全部子集 内容&#xff1a; 请写一个程序用字典顺序把一个{1,2,3,4,...,n}集合的全部子集找出来。 解答&#xff…

CSS 特殊性、继承与层叠

一、特殊性规则 选择器的特殊性由选择器本身的组件确定&#xff1b;特殊性由四个部分组成&#xff0c;其初始值为0&#xff0c;0&#xff0c;0&#xff0c;0。 1. 对于选择器中的每一个id&#xff0c;记0&#xff0c;1&#xff0c;0&#xff0c;0&#xff1b; 2. 对于选择…

解读WPF中的Xaml

1.Overview这篇文章主要分享从源代码角度解读wpf中xaml。由于源码查看起来错综复杂“随便找一个对象按下F12就是一个新的世界”&#xff0c;看源码的感觉就是在盗梦空间里来回穿梭&#xff1b;所以也是耗费很长的时间去阅读源码然后根据自己的理解编写文章和贴出部分关键源码。…

寒门博士分享读博经历成“抖音网红”惹争议,博士该这么“不正经”吗?

全世界只有3.14 % 的人关注了爆炸吧知识最近在抖音上&#xff0c;一个名叫“相宜”的主播火了。短短几个月时间内&#xff0c;她就涨粉940万。而和一般网红不同的是&#xff0c;相宜是一位刚毕业的博士。带火她的视频&#xff0c;是她自述博士毕业后的感想&#xff0c;目前已经…

Android Nine-patch

做了好多客户端软件了&#xff0c;突然发现里面有好多图片都是重复的&#xff0c;个别只是大小不一样&#xff0c;每次都使用大量图片&#xff0c;导致软件过大&#xff0c;项目总结的时候才发现Android已经提供了一种解决方案了&#xff0c;这就是NinePatchDrawable&#xff0…

稍微成型点的用WEBSOCKET实现的实时日志LOG输出

难的是还是就地用JS显示出来相关的发布进度。 还好&#xff0c;花了一下午实现了。 可以移植到项目中去罗。。。 websocket.py&#xff1a; import tornado.ioloop import tornado.web import tornado.websocket from tornado.ioloop import IOLoop from datetime import timed…

.NET6之MiniAPI(四):配置

配置文件&#xff0c;是一个每个应用服务程序常用的功能&#xff0c;从原来的终端应用时代&#xff0c;到现在的元宇宙时代&#xff0c;配置都是很悠然自得的存在。asp.net core提供了强大的配置文件访问机制&#xff0c;不管是MVC API还是MiniAPI&#xff0c;使用方式都是相同…