深圳建设网站推荐常宁seo外包

pingmian/2026/1/23 11:10:37/文章来源:
深圳建设网站推荐,常宁seo外包,定制开发小程序商城,凡科建站教程之前时间一直在使用Caliburn.Micro这种应用了MVVM模式的WPF框架做开发#xff0c;是时候总结一下了。Caliburn.Micro(https://blog.csdn.net/lzuacm/article/details/78886436)是一个轻量级的WPF框架#xff0c;简化了WPF中的不少用法#xff0c;推荐做WPF开发时优先使用。真… 之前时间一直在使用Caliburn.Micro这种应用了MVVM模式的WPF框架做开发是时候总结一下了。Caliburn.Micro(https://blog.csdn.net/lzuacm/article/details/78886436)是一个轻量级的WPF框架简化了WPF中的不少用法推荐做WPF开发时优先使用。真正快速而熟练地掌握一门技术就可以尝试着用最快的速度去构建一个玩具项目(Toy project)然后不断地优化、重构之。比如本文将介绍如何使用Caliburn.Micro v3.2开发出一个简单的计算器里面用到了C#中的async异步技术Caliburn.Micro中的Conductor等等~1.在VS中创建WPF项目2.使用NuGet包管理工具为当前项目安装Caliburn.Micro 对于Caliburn.Micro 1.x和2.x版只能使用.dll需手动给项目加Reference。而3.0以后的版本可使用NuGet包管理工具来管理安装和卸载既方便又彻底推荐使用。(ps: NuGet之于Visual Studio(C, C#等), 犹pip之于Python, npm之于node, maven之于Java, gem之于Ruby等等)3.框架搭建      删除项目根目录下的MainWindow.xaml按下图调整 App.xaml删除语句StartupUriMainWindow.xmal。填充Application.Resources Application.ResourcesResourceDictionaryResourceDictionary.MergedDictionariesResourceDictionarylocal:Bootstrapper x:Keybootstrapper//ResourceDictionary/ResourceDictionary.MergedDictionaries/ResourceDictionary/Application.Resources   4 . 创建Bootstrapper类然后让其继承自BootstrapperBase类并加上构造函数另外再重写函数OnStartup即可。using System.Windows;using Caliburn.Micro;using CaliburnMicro_Calculator.ViewModels;namespace CaliburnMicro_Calculator{public class Bootstrapper : BootstrapperBase {public Bootstrapper(){ Initialize(); }protected override void OnStartup(object obj, StartupEventArgs e){ DisplayRootViewForShellViewModel(); } }}   5 . 在项目目录下新建Models, ViewModels, Views这3个文件夹在ViewModel文件夹中添加ShellViewModel.cs并创建Left, Right和Result这3个属性。需要注意的是 ShellViewModel.cs需要继承类 Screen 和 INotifyPropertyChanged(用于感知并同步所绑定属性的变化)ShellViewModel具体代码为:using System.ComponentModel;using System.Threading;using System.Windows;using System.Windows.Controls;using Caliburn.Micro;namespace CaliburnMicro_Calculator.ViewModels{public class ShellViewModel : Screen, INotifyPropertyChanged {private double _left;private double _right;private double _result;public double Left {get { return _left; }set { _left value; NotifyOfPropertyChange(); } }public double Right {get { return _right; }set { _right value; NotifyOfPropertyChange(); } }public double Result {get { return _result; }set { _result value; NotifyOfPropertyChange(); } }}说明: 最开始布局xaml时设计位置时采用的是左(operand 1), 中(operand 2), 右(result)于是属性值使用了Left, Right和Result。4.设计XAML并绑定属性      在Views文件夹中创建Window命名为ShellView.xaml在Views文件夹下创建子文件夹Images用于存放,-,*,/这4种操作对应的小图标其具体代码如下Window x:ClassCaliburnMicro_Calculator.Views.ShellViewxmlnshttp://schemas.microsoft.com/winfx/2006/xaml/presentationxmlns:xhttp://schemas.microsoft.com/winfx/2006/xamlxmlns:dhttp://schemas.microsoft.com/expression/blend/2008xmlns:mchttp://schemas.openxmlformats.org/markup-compatibility/2006xmlns:localclr-namespace:CaliburnMicro_Calculator.Viewsxmlns:calhttp://www.caliburnproject.orgmc:IgnorabledTitleCalculator SizeToContentHeight Width240StackPanel BackgroundBeigeStackPanel OrientationHorizontalLabel Margin10Target{Binding ElementNameleft} Operand _1:/LabelTextBox Margin10Width72x:Nameleft//StackPanelStackPanel OrientationHorizontalLabel Margin10Target{Binding ElementNameright} Operand _2:/LabelTextBox Margin10Width72x:Nameright//StackPanelStackPanel OrientationHorizontalButton Margin10x:NamebtnPlus cal:Message.Attach[Event Click][Action Plus(left.Text, right.Text):result.Text]Image SourceImages/op1.ICO//ButtonButton Margin10x:NamebtnMinus cal:Message.Attach[Event Click][Action Minus(left.Text, right.Text):result.Text]Image SourceImages/op2.ICO//ButtonButton Margin10x:NamebtnMultiply cal:Message.Attach[Event Click][Action Multipy(left.Text, right.Text):result.Text]Image SourceImages/op3.ICO//ButtonButton Margin10x:NamebtnDivide IsEnabled{Binding PathCanDivide}cal:Message.Attach[Event Click][Action Divide(left.Text, right.Text):result.Text]Image SourceImages/op4.ICO//Button/StackPanelStackPanel OrientationHorizontalLabel Margin10 Answer:/LabelTextBox Margin10Width72Text {Binding PathResult, StringFormat{}{0:F4}} IsReadOnlyTrue //StackPanel/StackPanel/Window说明对操作数Operand _1和Operand _2按Alt键数字可以选中该处这是WPF的一个特殊用法。由于计算结果不希望被修改于是加上了属性IsReadOnlyTrue。5.设计并绑定事件      由于暂时只打算实现, -, *, /四种操作于是我们只需创建相应的4个函数即可由于除数是0这个操作不允许于是需再加个判断函数CanDivide。Caliburn.Micro中绑定事件的写法是:cal:Message.Attach[Event E][Action A](E是操作比如Click, MouseDown, KeyDown等等A是ViewModel中具体的函数。)向ShellViewModel中加入事件中要做的事此时ShellViewModel为using System.ComponentModel;using System.Threading;using System.Windows;using System.Windows.Controls;using Caliburn.Micro;namespace CaliburnMicro_Calculator.ViewModels{public class ShellViewModel : Screen, INotifyPropertyChanged {private double _left;private double _right;private double _result;public double Left {get { return _left; }set { _left value; NotifyOfPropertyChange(); } }public double Right {get { return _right; }set { _right value; NotifyOfPropertyChange(); } }public double Result {get { return _result; }set { _result value; NotifyOfPropertyChange(); } }public bool CanDivide(double left, double right){return right ! 0; }public async void Divide(double left, double right){ Thread.Sleep(600);if (CanDivide(left, right) true) Result left / right;else MessageBox.Show(Divider cannot be zero., Warning, MessageBoxButton.OK, MessageBoxImage.Warning); }public async void Plus(double left, double right){ Result left right; }public async void Minus(double left, double right){ Result left - right; }public async void Multipy(double left, double right){ Result left * right; } }}此时计算器的功能已基本完成但我们可以对ViewModel进行适当的调整1.创建新的ViewModel - CalculatorViewModel将原来的ShellViewModel中具体的计算逻辑移入到CalculatorViewModel中2.此时让ShellViewModel继承ConductorObject于是ShellViewModel拥有了管理Screen实例的功能(ViewModel中使用ActivateItem函数而View中使用X:NameActivateItem标签)其具体代码为:using System.ComponentModel;using System.Threading;using System.Windows;using System.Windows.Controls;using Caliburn.Micro;namespace CaliburnMicro_Calculator.ViewModels{public class ShellViewModel : Conductorobject {public ShellViewModel(){ }public void ShowCalculator(){ ActivateItem(new CalculatorViewModel()); } }}此时CalculatorViewModel的具体代码为using System.ComponentModel;using System.Threading;using System.Windows;using Caliburn.Micro;namespace CaliburnMicro_Calculator.ViewModels{public class CalculatorViewModel: Screen, INotifyPropertyChanged {private double _left;private double _right;private double _result;public double Left {get { return _left; }set { _left value; NotifyOfPropertyChange(); } }public double Right {get { return _right; }set { _right value; NotifyOfPropertyChange(); } }public double Result {get { return _result; }set { _result value; NotifyOfPropertyChange(); } }public CalculatorViewModel(){ }public bool CanDivide(double left, double right){return right ! 0; }public async void Divide(double left, double right){ Thread.Sleep(600);if (CanDivide(left, right) true) Result left / right;else MessageBox.Show(Divider cannot be zero., Warning, MessageBoxButton.OK, MessageBoxImage.Warning); }public async void Plus(double left, double right){ Result left right; }public async void Minus(double left, double right){ Result left - right; }public async void Multipy(double left, double right){ Result left * right; } }}  3 . 对于View只需把CalculatorViewModel对应的CalculatorView作为ContentControl控件嵌入ShellView即可。此时ShellView的代码调整为:Window x:ClassCaliburnMicro_Calculator.Views.ShellViewxmlnshttp://schemas.microsoft.com/winfx/2006/xaml/presentationxmlns:xhttp://schemas.microsoft.com/winfx/2006/xamlxmlns:dhttp://schemas.microsoft.com/expression/blend/2008xmlns:mchttp://schemas.openxmlformats.org/markup-compatibility/2006xmlns:localclr-namespace:CaliburnMicro_Calculator.Viewsxmlns:calhttp://www.caliburnproject.orgmc:IgnorabledTitleCalculator SizeToContentHeight Width240Grid MinHeight200Button ContentShow Calculator x:NameShowCalculator Grid.Row0/ButtonContentControl x:NameActiveItem/ContentControl /Grid/Window另外提一点向ViewModel A中嵌入ViewModel B一般来说需要做的操作是在A的view中使用ContentControl绑定B的ViewModel只需使用语句cal:View.Model{Binding BViewModel}即可而B的view是UserControl就可以啦。此时CalculatorView是一个UserControl其代码为:UserControl x:ClassCaliburnMicro_Calculator.Views.CalculatorViewxmlnshttp://schemas.microsoft.com/winfx/2006/xaml/presentationxmlns:xhttp://schemas.microsoft.com/winfx/2006/xamlxmlns:mchttp://schemas.openxmlformats.org/markup-compatibility/2006xmlns:dhttp://schemas.microsoft.com/expression/blend/2008xmlns:localclr-namespace:CaliburnMicro_Calculator.Viewsxmlns:calhttp://www.caliburnproject.orgmc:IgnorabledWidth240StackPanel BackgroundBeigeStackPanel OrientationHorizontalLabel Margin10Target{Binding ElementNameleft} Operand _1:/LabelTextBox Margin10Width72x:Nameleft//StackPanelStackPanel OrientationHorizontalLabel Margin10Target{Binding ElementNameright} Operand _2:/LabelTextBox Margin10Width72x:Nameright//StackPanelStackPanel OrientationHorizontal HorizontalAlignmentCenterButton Margin10x:NamebtnPlus cal:Message.Attach[Event Click][Action Plus(left.Text, right.Text):result.Text]Image SourceImages/op1.ICO//ButtonButton Margin10x:NamebtnMinus cal:Message.Attach[Event Click][Action Minus(left.Text, right.Text):result.Text]Image SourceImages/op2.ICO//ButtonButton Margin10x:NamebtnMultiply cal:Message.Attach[Event Click][Action Multipy(left.Text, right.Text):result.Text]Image SourceImages/op3.ICO//ButtonButton Margin10x:NamebtnDivide IsEnabled{Binding PathCanDivide}cal:Message.Attach[Event Click][Action Divide(left.Text, right.Text):result.Text]Image SourceImages/op4.ICO//Button/StackPanelStackPanel OrientationHorizontalLabel Margin10 Answer:/LabelTextBox Margin10Width72Text {Binding PathResult, StringFormat{}{0:F4}, UpdateSourceTriggerPropertyChanged} IsReadOnlyTrue //StackPanel/StackPanel/UserControl好啦就酱由于本例中逻辑并不复杂Model暂时用不上对于复杂一点的项目Model主要负责数据的读取如文件操作、数据库操作、service调用等以后有机会举例具体来说。如果需要持久化(persistent)则还需给给每对M-VM(Model和ViewModel)加入State这个实际工程中也用得特别多。6.功能举例      Calculator主页点击按钮“ShowCalculator”即可看到具体的计算器~乘法举例除法举例最后附上代码CaliburnMicro-Calculator: A simple Calculator using Caliburn.Microhttps://github.com/yanglr/CaliburnMicro-Calculator欢迎fork和star如有改进意见欢迎提交pull request~原文地址https://blog.csdn.net/lzuacm/article/details/80559517更多精彩文章欢迎访问本人博客https://enjoy233.cnblogs.com 或 知乎搜索「Bravo Yeung」.欢迎转发到朋友圈公众号转载请后台联系本人申请授权~推荐阅读中英文电子书下载网站大搜罗英语语法工具 | 那些可以纠正英语文章中语法的神器们开发者见闻 | ASP.NET Core开发者路线图点击在看的人2019都会变得特别好看

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

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

相关文章

广东营销型网站建设网站的建设与维护有什么作用

常用查错网址: SMC_ERROR (ENUM) 删除 Web

平顶山河南网站建设wordpress 调查问卷

【环境配置的原因】在windows系统下,很多软件的安装都需要设置环境变量,比如安装JAVA JDK。如果不安装环境变量,在非软件安装的目录下运行javac命令,将会报告“找不到文件”类似的错误。那么,什么是环境变量呢&#xf…

选网站建设要注意什么网站的建站过程

文章目录 设置字段定界符流程控制语句条件判断语句循环语句while语句for循环do循环 其他语句 数组应用数组的定义读取数组的值数组相关函数二维、多维数组使用 从零学 python 设置字段定界符 默认的字段定界符是空格,可以使用-F “定界符” 明确指定一个定界符&…

wordpress中文网站最好用的建站模板

Linux之buildroot(4)配置项目 Author:Onceday Date:2023年12月3日 漫漫长路,才刚刚开始… 全系列文章请查看专栏: buildroot编译框架_Once_day的博客-CSDN博客。 参考文档: Buildroot - Making Embedded Linux Easy 文章目录…

网站 空间费用建设股票网站

一、AT89S51单片机的并行I/O端口 1.1 P0口 AT89S51的P0口是一个通用的I/O口,可以用于输入和输出。每个引脚都可以通过软件控制为输入或输出模式。 1.1.1 P0口的工作原理 P0口的工作原理是通过对P0寄存器的读写操作来控制P0口的引脚。 输出模式:当P0口…

万州做网站多少钱在线设计房屋效果图

1.为什么要使用FinalShell连接Linux系统? 如果直接使用VMware上的Linux系统会有很多不方便: 内容的复制粘贴跨越VMware不方便文件的上传、下载跨越VMware不方便 也就是和Linux系统的各类交互,跨越VMware不方便 2.FinalShell下载 FinalSh…

丽水公司网站建设电子商务如何设计网站建设

文章目录 前言MySQL 导出数据使用 SELECT ... INTO OUTFILE 语句导出数据SELECT ... INTO OUTFILE 语句有以下属性:导出表作为原始数据导出SQL格式的数据将数据表及数据库拷贝至其他主机 后言 前言 hello world欢迎来到前端的新世界 😜当前文章系列专栏:…

海南 网站 建设一个网站的设计周期

兼容性测试是确保应用程序在多样化的技术环境中正常运行的关键步骤。它有助于提高用户满意度,扩大市场覆盖范围,同时确保法规合规性。通过正确执行兼容性测试,企业可以确保其应用程序在各种平台上提供一致的卓越用户体验,从而增强…

网站推广公司官网织梦婚纱网站模板

1.接口文档访问 (1)swagger http://{ip}:{port}/swagger-ui/index.html http://localhost:8080/swagger-ui/index.html (2)knife4j http://{ip}:{port}/doc.html http://localhost:8080/doc.html

一个域名绑定多个网站吗网站大全软件下载

文章目录 数字与数学符号统计阶乘0的个数整数反转字符串转数字判断回文数字十进制转七进制进制转换数组实现整数加法字符串加法二进制求和求2的幂求3的幂求4的幂最大公约数最小公倍数判断质数质数计数判断丑数丑数计数 数字与数学 数字与数学的问题基础且庞大,算法…

广州营销型网站建设团队宣城做网站

说明:模板引擎主要针对于渲染DOM,取代了字符串拼接,用下面的代码亲测handlebars模板引擎比字符串拼接渲染DOM慢了20ms, 这里配置一个在线DEMO,简单说明下handlebars.js的基本用法,需要根据获取的数据去渲染…

海纳企业网站管理系统源码汽车便宜网站建设

第12章 服务端渲染 想让搜索引擎抓取到你的站点,服务端渲染这一步不可或缺,服务端渲染还可以提升站点的性能,因为在加载JavaScript脚本的同时,浏览器就可以进行页面渲染。 React的虚拟DOM是其可被用于服务端渲染的关键。首先每个R…

电子商务网站建设李洪心课后答案达内前端

Less和Sass都是CSS预处理器,它们提供了更强大、更灵活的方式来编写CSS样式。以下是Less和Sass之间的一些区别: 语法:Less使用类似于CSS的语法,而Sass使用类似于Ruby的语法。Less使用大括号 {} 和分号 ; 来表示代码块和语句&#x…

网站平台怎么做推广最好的做法是()

wps word 文档里的空白空间太大了,如下图1 点击【页面】--->【页边距】,把左边、右边的页边距调为0厘米。如下图2 点击【视图】--->【显示比例】从75%改为页宽,页宽的意思是使页面的宽度与窗口的宽度一致。如下图3 图1

衡阳网站建设公司电话咋把网站制作成软件

这是有关使用Spring 3.1和Spring Security 3.1和基于Java的配置来建立安全的RESTful Web Service的系列文章的第七篇。 本文将重点介绍RESTful Web服务中的分页实现 。 REST with Spring系列: 第1部分– 使用Spring 3.1和基于Java的配置引导Web应用程序 第2部分–…

仿珠宝首饰网站开发网站空间买卖

作者:诗颖摘要:日前,英伟达 Developer Blog 上一篇博文详细陈述了英伟达 Volta Tensor Core GPU 在深度学习社群取得的巨大突破,以及种种突破背后的技术细节。2017 年 5 月,在 GTC 2017 上,英伟达 CEO 黄仁…

手机建设中网站首页女性pose拍照

dump文件 dump文件记录当前程序运行某一时刻的信息,包括内存,线程,线程栈,变量等等,相当于调试程序时运行到某个断点上,把程序运行的信息记录下来。可以通过Windbg打开dump,查看程序运行的变量…

站长工具综合查询ip大良外贸网站设计

1、前言 之前写了一篇文章关于 flutter 初体验的一篇,https://www.cnblogs.com/niceyoo/p/9240359.html,当时一顿骚操作,然后程序就跑起来了。 隔了好一段时间,换了个电脑,重新装了个AndroidStudio,继续搭建…

中小企业公共服务平台网站建设seo诊断报告示例

假设有这样的一种情况,在两个组件中。一个组件【A】主要是比如说放表格数据,而另外一个组件【B】是专门用来向组件A的表格添加数据的表单。这个时候就是两个兄弟组件之间传递数据了。首先想到的是使用兄弟组件传递数据的方法: 新建一个中间件…

网站模板怎么修改成可视化西部数码WordPress开启伪静态

大家好呀,美赛开赛还有四天的时间,今天给大家带来的是美赛论文写作时非常实用的一个小技巧——快速输入任何复杂公式。 相信很多小伙伴在论文写作的时候都有一个小烦恼,那就是在面对比较复杂的公式的时候,应该怎么进行快速输入呢…