计划慢慢整理自己在WPF学习和工作应用中的一些心得和想法,先从一个简单的用法说起 在WPF中,XAML标记语言中绑定数据,而数据源就是指定为ViewModel类,而非界面本身的逻辑代码类 这样一定程度上达到界面与业务逻辑分离的思想,UI层只需要对ViewModel类进行依赖,只要ViewModel公开出来的属性不变,界面层就不用根据业务逻辑变化而进行修改 这大概就是MVVM模式的一个基本出发点,配合WPF的依赖属性和命令等结合使用,会有更复杂的用法及更好的效果 这里先从一个简单的数据绑定用法为例…
问题:WPF中MVVM模式下 ListView绑定ListCollectionView时,CurrentChanged无法触发 解决方案: 初期方案:利用ListView的SelectionChanged事件在界面后台逻辑中调用VM业务逻辑. -- 弊端:前后耦合度增加. 最终方案:设置ListView的IsSynchronizedWithCurrentItem属性为True. 经历(吐槽): 百度看了几页没找到解决方案,谷歌第一页就找到了. -- 真不是我崇洋媚外,我也很无奈. 搜索词:"WP…
ListBoxItem lstitem = this.list.ItemContainerGenerator.ContainerFromItem(m) as ListBoxItem; 其中this.list是使用了mvvm模式绑定了数据集的ListBox…
原文:WPF ContextMenu 在MVVM模式中绑定 Command及使用CommandParameter传参 ContextMenu无论定义在.cs或.xaml文件中,都不继承父级的DataContext,所以如果要绑定父级的DataContext,直接DataContext=“{Binding}”是行不通的 不能绑父级,但是能绑资源 第一步:定义一个中间类用来做资源对象 public class BindingProxy : Freezable { #region Overrides…
在开始介绍angular原理之前,我们有必要先了解下mvvm模式在angular中运用.虽然在angular社区一直将angular统称为前端MVC框架,同时angular团队也称它为MVW(Whatever)框架,但angular框架整体上更接近MVVM模式.下面是Igor Minar发布在Google+ https://plus.google.com/+IgorMinar/posts/DRUAkZmXjNV的文章内容: MVC vs MVVM vs MVP. What a controver…
MVVM 模式是一个很久之前的技术了,最近因为一个项目的原因,需要使用 WPF 技术,所以,重新翻出来从前的一段程序,重温一下当年的技术. MVVM 模式 MVVM 实际上涉及三个部分,Model, View 和 ViewModel ,三者的关系如下图所示. 在三部分的关系中,视图显示的内容和操作完全依赖于 ViewModel. Model 是应用程序的核心,代表着最大.最重要的业务资产,因为它记录了所有复杂的业务实体.它们之间的关系以及它们的功能. Model 之上是 ViewModel.Vi…
最近在研究学习Swift,苹果希望它迅速取代复杂的Objective-C开发,引发了一大堆热潮去学它,放眼望去各个培训机构都已打着Swift开发0基础快速上手的招牌了.不过我觉得,等同于无C++基础上手学习C#一样,即使将来OC被淘汰,那也是N年之后的事情,如果真的要做IOS开发,趁现在Swift才刚开始,花那么几个月去了解一下OC绝对是一件有帮助的事情. 扯远了,我前几天刚接触到一个叫做mvvm的框架,发现很有意思,带着学习的态度来写点东西,不足之处一起研究.还有一个很重要的原因,我发现不少同…
先科普一下:什么是WPF,请看下图 微软对于WPF技术的构想是很宏大的,可惜普及率不高,不过如果你要做Windows客户端开发的话WPF技术还是值得一学的. 什么是MVVM模式 简单来说它是一种高级的UI设计模式.据我所知目前还运用在一些js框架中,比如AngularJS.其他的UI设计模式还包括MVC.MVP,个人觉得最强大的还是MVVM. MVVM主体框架如下图: The Model is the entity that represents the business concept; it…
相信很多学习和开发wpf项目的同学都了解过mvvm模式,同样,在mvvm模式下会有一个不可忽视的问题,就是怎么在xaml中弹出窗体,而不破坏MVVM本身的结构. 关于弹出窗体的方式还是很多的,本文先讲一下用触发器做处理. 我们先要在xaml中引用 xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" 需要System.Windows.Interactivity.dll   这个文件可以在blend的安装…
在项目中,凡是涉及到表格的地方用的最多的控件,自然少不了DataGrid的身影,它明了的展示各种数据让人十分喜欢.现在要实现一个功能,使DataGrid具有全选和项选中的功能,如果在传统后台代码中完成这个事情可以说十分简单,但是换到MVVM模式下呢? 不得不面临一个很囧的情况,为了完成UI端CheckBox被选中后能在ViewModel中获取到选中的数据,不得不在在业务实体之外添加一个字段IsChecked 来与我们的数据交互,这样不仅影响美观还影响心情. 为了实现这一点,无疑需要设置DataG…
MVVM模式由Model,View,ViewModel三部分组成. Model需继承INotifyPropertyChange(属性修改通知) ViewModel负责业务逻辑,连接View和Model View上面的控件绑定model和命令(command) 注:数据绑定binding实现了INotifyPropertyChange接口的事件. MVVM框架实现了数据双向绑定,即View和Model双向绑定.最终实现包含Model,Command,View,ViewModel四部分.…
1.传统MVP模式:业务逻辑相关的控制层 M:模型层,ajax请求 V:dom层,视图 P:控制器.js代码之类的 2.MVVM MVVM模式主要操作数据层,代码减少量是MVP的30%甚至70%…
源代码下载 这个程序是TabControl和Webbrowser的练手小程序 可达到练手目的有: MVVM设计模式的基本使用 Binding(包括相对源[RelativeSource]绑定)的基本使用 IE COM的基本使用 委托和事件基本使用 程序可实现的效果: 控制Webbrowser新窗口在TabItem中 TabItem的标头为网页的标题 TabItem可关闭网页 新开网页自动在前 效果GIF 技术要点: Xaml <Window x:Class="WPF_WebBrowser_T…
在写次文前先不得不说下网上的其他wpf的DataGrid绑定ComboBox的方式,看了之后真是让人欲仙欲死. 首先告诉你一大堆的模型,一大堆的控件模板,其实或许你紧紧只想知道怎么让combobox怎么显示出来而已. 惯例先上图: 达到这样的效果其实很简单,除了让数据模型之外紧紧只有几行代码. 先看数据模型: public class VModel : INotifyPropertyChanged { private string _Name; public string Name { get…
嗯..最近回家去了,2个月没写过代码了,面试只能吹牛,基础都忘了,今天回顾一下,分享一篇通过附加属性去处理窗体弹出的情况. 或许老司机已经想到了,通过设置附加属性值,值变更的回调函数去处理窗体弹出,是的,很简单,想法的问题. public static readonly DependencyProperty IsModalProperty = DependencyProperty.RegisterAttached("IsModal", typeof(bool), typeof(Wind…
背景描述:在Number1和Number2文本框中输入数字后,在Answer文本框中会按照下图所示显示. xaml代码: <Window.Resources> <local:MyValueConverter x:Key="MyValueConverter"/> </Window.Resources> <Grid> <StackPanel HorizontalAlignment="Center" VerticalA…
原文:WPF MVVM模式中,通过命令实现窗体拖动.跳转以及显隐控制 在WPF中使用MVVM模式,可以让我们的程序实现界面与功能的分离,方便开发,易于维护.但是,很多初学者会在使用MVVM的过程中遇到一个显而易见且无法回避的问题,那就是不同的窗体之间如何跳转?很多人在介绍MVVM的使用时,都没有明显提到该如何解决这一问题,不知是因为觉得太简单了还是其他原因. 博主根据自己的开发经验,写了一个简单的示例程序,介绍MVVM模式中,如何通过命令来控制窗体的跳转.拖动与显隐控制. 先看效果: 主窗体中只…
没有找到很好的MVVM模式介绍文章,简单找了一篇,分享一下.MVVM实现了UI\UE设计师(Expression Blend 4设计界面)和软件工程师的合理分工,在SilverLight.WPF.Windows Phone开发中得到很好的应用,当然作为设计模式的结合体,提供的是软件设计的一种思路,业务场景符合其设计思路,都可以很好的利用.原文如下: 摘要:为解决适用于RIA应用系统开发的设计模式的问题,提出引出MVVM模式.该模式由视图.视图模型.模型三部分组成,通过实现INotifyPrope…
1. MVVM MVVM的设计模式最早于2005年由微软的WPF和Silverlight架构师John Gossman在他的博客中提到. WPF中采用MVVM的架构可以获得以下好处: 1. 将UI和业务的设计完全分开,View只是ViewModel的消费者 2. 有助于我们区别并哪些是UI操作,哪些是业务操作,而不是将他们混淆 3.层与层之间耦合度降低,这一点非常符合面向对象(OOP)的思想. 2.MVVM 用图来表示,这个是从网上找的图,简单明了,省去了自己画.   3.下面来一步一步写代码吧…
转自:http://www.cnblogs.com/626498301/archive/2011/04/08/2009404.html 进公司实习工作后,本人接触的第一个技术名语就是MVVM模式,从学习到运用,已经有大半年时间,这篇文章将简单谈谈个人在产品开发过程中使用MVVM模式的体会. 传统的WinForm和ASP.NET应用程序是基于事件驱动开发的,以ASP.NET为例,在实际开发中,*.aspx页面用于渲染HTML,*.aspx.cs页面用于实现服务端逻辑,在开发初期,这种方式显得方便快…
MVC VS. MVP VS. MVVM  了解MVVM模式之前,我们先来简单了解一下从MVC到MVVM的变迁.这个变迁是耦合从紧到松的变迁,是对依赖处理的进化,是应对变化技术的成熟. MVC  MVC全名是Model View Controller, 是模型(model)-视图(view)-控制器(controller)的缩写,它用一种将业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑.将系统进行MVC分层…
    MVVM模式有助于清楚的区分应用程序界面的业务层和展现层.保持一个清晰的应用程序逻辑和UI分离有助于处理开发和设计过程中大量的问题,同时,使得应用程序的测试,维护,和扩展更加容易.MVVM也可以极大的提升代码的可重用性也可以使开发人员和设计人员在分别开发应用程序的某一部分时更方便的沟通交流.     运用MVVM模式,应用程序的UI和下层表现以及业务逻辑被拆分到三个单独到类中:视图,封装了UI和UI逻辑:视图模型,封装了展现逻辑和状态:模型,封装了应用程序的业务逻辑和数据.     Pr…
mvc的模式已经深入人心,想必大家都很熟悉,但是未必都能遵守mvc模式.我们的一个mvc项目比较简单,主要是数据库的查询.一个DBHelp类,封装了数据库的操作,然后Controller中进行中各种查询,包含分页查询.也就是说,所有的逻辑全部在Controller中完成.请问这还是mvc模式吗? 严格意义上,已经违背了mvc模式,但是从实践层面看,似乎没有什么问题,这样做简单好多.我们知道mvc把一个应用程序划分了三个层次结构.Model.View和Controller,Model代表了业务逻辑…
在第一篇文章中的示例中,我们已经简单的了解了应用MVVM模式的流程,我的本意是你已经了解了一点MVVM的概念,然后又没有一个较好的例子学习,可以跟着我一起学习MVVM模式,所以这个部分,都是没有理论知识的,当然整个例子学完后,我们会回过头探讨一下,将其总结出来. 现 在我们主要在前面的示例上进行扩展,前面的示例中我们主要是将一个源对象绑定到DataGrid中的,接下来我们继续使用MVVM模式,将 DataGrid选择行的变化体现界面中,其实通过这个需求变化,你会发现UI与逻辑分离带来的优势,尽管…
在第一篇文章中的示例中,我们已经简单的了解了应用MVVM模式的流程,我的本意是你已经了解了一点MVVM的概念,然后又没有一个较好的例子学习,可以跟着我一起学习MVVM模式,所以这个部分,都是没有理论知识的,当然整个例子学完后,我们会回过头探讨一下,将其总结出来. 现在我们主要在前面的示例上进行扩展,前面的示例中我们主要是将一个源对象绑定到DataGrid中的,接下来我们继续使用MVVM模式,将DataGrid选择行的变化体现界面中,其实通过这个需求变化,你会发现UI与逻辑分离带来的优势,尽管才开…
Silverlight中使用MVVM(1)--基础 Silverlight中使用MVVM(2)—提高 Silverlight中使用MVVM(3)—进阶 Silverlight中使用MVVM(4)—演练 在第一篇文章中的示例中,我们已经简单的了解了应用MVVM模式的流程,我的本意是你已经了解了一点MVVM的概念,然后又没有一个较好的例子学习,可以跟着我一起学习MVVM模式,所以这个部分,都是没有理论知识的,当然整个例子学完后,我们会回过头探讨一下,将其总结出来. 现在我们主要在前面的示例上进行扩展…
最近写了一些 MVVM 框架的文章,翻了一些 Microsoft Docs 的文档,顺便就对 MVVM 本身来了兴致,想看看更多当年相关的文档.在 MVVM 出现后十多年,我在不同的场合见到过多种 MVVM 的实现方式,也看到过各种 MVVM 框架的多次改进(这些框架通常包含多个用于实现解耦体系结构的服务,在一定程度上使 MVVM 的确切定义变得模糊),这些都让我对 MVVM 的理解变得多样化.这种情况下重温一下 MVVM 的文档也并不是毫无意义. 在 Microsoft Docs 网站上搜 "…
首先要在WPF中播放视频和音频,我们就需要用到MediaElement控件,下面我们示例播放音频和视频. 用MediaElement播放音频: 第一步:将你需要播放的音频(mp3)放在你WPF项目的Debug文件夹里面. 第二步: 在Xaml中: <Grid> <MediaElement x:Name="Music" LoadedBehavior="Manual" Visibility="Hidden"/> </Gr…
vue,基于mvvm模式下的一个前端框架 mvvm模式下简单的实现数据代理,数据劫持 1.是用Object.defineProperty 实现数据代理 2.使用发布订阅者模式,配合 Object.defineProperty,实现数据劫持 数据劫持包括依赖收集和依赖促发 (只考虑最简单的方式,并且没有包括具体的依赖收集,我模拟的依赖收集,依赖收集得是在模板解析的时候,需要使用正则匹配出vue的一般指令和表达式) /* 实现一个简易的vue */ class myvue { constructor…
MVVM模式解析和在WPF中的实现(五) View和ViewModel的通信 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中的实现(三)命令绑定 MVVM模式解析和在WPF中的实现(四)事件绑定 MVVM模式解析和在WPF中的实现(五)View和ViewModel的通信 MVVM模式解析和在WPF中的实现(六)用依赖注入的方式配置ViewModel并注册消息 0x00 还需要些什么呢 在前面几篇…