mvvm

Does CallerMemberNameAttribute use reflection

我只是一个虾纸丫 提交于 2021-01-02 05:26:09
问题 You can use the CallerMemberName attribute to avoid specifying the member name as a String argument to the called method when implementing INotifyPropertyChanged interface. The question is does it use reflection behind the scene? Are there any performance hit over hard coding Property name? 回答1: No; the compiler hard-codes the member-name directly during compilation. In terms of the IL, this is ldstr . For example if we compile: static void Implicit() { Log(); } static void Explicit() { Log(

MVVM的KVO属性绑定自定义

て烟熏妆下的殇ゞ 提交于 2021-01-01 03:04:29
我们在使用MVVM设计模式的时候会需要监听数据模型的属性变化,使用RAC是比较简洁好用的,但是如果不想引入RAC这样重量级的框架,那我们该如何编写符合监听需求的框架呢,我们的思路是封装系统的KVO,封装添加和删除监听的代码,改变的值通过block返回。 1、首先我们定义一个单例KVOController来统一管理属性监听,每个监听都有个回调。 typedef void(^ObserverKeyPathDidChange)(id value); @interface KVOController : NSObject + (instancetype)shareInstance; - (void)mj_observeObject:(NSObject *)object forKeyPath:(NSString *)keyPath observerKeyPathDidChange:(ObserverKeyPathDidChange)observerKeyPathDidChange; @end #import "KVOController.h" #import <objc/runtime.h> #import "MJObserver.h" #import "NSObject+OBExtention.h" @interface KVOController () @property

Why sometimes Task is significantly slower than Thread?

无人久伴 提交于 2020-12-29 19:46:20
问题 I'm making a WPF application using MVVM pattern. I found sometimes Task is significantly slower than Thread. For example, in a test ViewModel: public void DoSomething() { Stopwatch stopwatch = Stopwatch.StartNew(); new Thread(() => { Debug.Print(string.Format("Elapsed: {0}", stopwatch.ElapsedMilliseconds)); }).Start(); } The output usually is Elapsed: 0 . It cost 0 millisecond. But if I replace Thread with Task . It could cost 5000~15000 milliseconds. I tried to reproduce this in another WPF

Why sometimes Task is significantly slower than Thread?

╄→гoц情女王★ 提交于 2020-12-29 19:38:32
问题 I'm making a WPF application using MVVM pattern. I found sometimes Task is significantly slower than Thread. For example, in a test ViewModel: public void DoSomething() { Stopwatch stopwatch = Stopwatch.StartNew(); new Thread(() => { Debug.Print(string.Format("Elapsed: {0}", stopwatch.ElapsedMilliseconds)); }).Start(); } The output usually is Elapsed: 0 . It cost 0 millisecond. But if I replace Thread with Task . It could cost 5000~15000 milliseconds. I tried to reproduce this in another WPF

Why sometimes Task is significantly slower than Thread?

十年热恋 提交于 2020-12-29 19:35:12
问题 I'm making a WPF application using MVVM pattern. I found sometimes Task is significantly slower than Thread. For example, in a test ViewModel: public void DoSomething() { Stopwatch stopwatch = Stopwatch.StartNew(); new Thread(() => { Debug.Print(string.Format("Elapsed: {0}", stopwatch.ElapsedMilliseconds)); }).Start(); } The output usually is Elapsed: 0 . It cost 0 millisecond. But if I replace Thread with Task . It could cost 5000~15000 milliseconds. I tried to reproduce this in another WPF

vue的理解

非 Y 不嫁゛ 提交于 2020-12-29 07:53:00
vue提供的MVVM框架模式的数据双向绑定,实现了HTML和js的代码分离,提高代码的维护性 vue.js的核心思想包括:数据驱动和组件化思想。 如果没有中间的ViewModel则关系图编程下面所示:通过Ajax通信获得后台数据,那么要将获得数据显示在DOM上,则需要手动操作DOM节点。这是一个繁琐的过程,还很容易出错。 而使用vue.js后则省去手动操作DOM 。在vue.js里面只需要改变数据,Vue.js通过Directives指令去对DOM做封装,当数据发生变化,会通知指令去修改对应的DOM,数据驱动DOM的变化,DOM是数据的一种功能自然的映射。vue.js还会对操作做一些监听(DOM Listener),当我们修改视图的时候,vue.js监听到这些变化,从而改变数据。这样就形成了数据的双向绑定。 实现数据双向绑定的方法: 数据劫持结合发布者-订阅者模式(vue.js)【vue data是如何实现的??】 vue.js采用数据劫持结合发布者-订阅者的方式,通过Object.defineProperty()来劫持各个属性的setter,getter,在数据变动时,发布消息给订阅者,触发相应的监听回调。 具体的来讲,Vue.js通过Directives指令去对DOM做封装,当数据发生变化,会通知指令去修改对应的DOM,数据驱动DOM的变化。vue.js还会对操作做一些监听

Static class to dependency injection

落花浮王杯 提交于 2020-12-25 04:02:29
问题 The application I'm trying to get to work uses MVVM. The biggest part of this post is an explanation of what I tried and what I got working. The question is near the bottom of the post. The used Localizer class is only used here as an example and can easily be replaced with another class. I have a class library with a Localizer class. This purpose of this class is to change the language of the application on the fly, without having to restart the application. The `Localizer has to be

C#/.Net Core/WPF框架初建(国际化、主题色)

浪尽此生 提交于 2020-12-24 07:43:05
C#/.Net Core/WPF框架初建(国际化、主题色) English | 简体中文 作为 TerminalMACS 的一个子进程模块 - WPF管理端,目前搭建框架部分功能:本地化、国际化、主题色修改等。 导航目录 框架已添加功能说明 1.1. 国际化、本地化 1.2. Metro风格主窗体 1.3. 动态更换主题色 关于TerminalMACS及本WPF管理端 关于项目开源 参考资料 1. 框架已添加功能说明 1.1. 国际化、本地化 源码放在Github上,希望分享给更多人,所以添加了国际化功能,默认支持中、英、日三国语言,按照已有套路扩展其他语言也方便,看下面的效果: 本项目(TerminalMACS的WPF管理端)使用的资源字典存储翻译文件,其他方式还有资源文件、微软官方的国际化方案(未研究)等。下面是翻译文件截图: 三个资源文件使用需要注意: 选择一个默认文件(比如en.xaml,英文)作为默认语言文件,需要将生成操作属性设置为 "页", 设置截图如下: 其他语言文件设置生成操作属性为内容,设置截图如下: 需要将默认语言资源文件添加到App.xaml中,其他语言不用: <Application.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries>

MVVMLight学习笔记(二)---MVVMLight框架初探

可紊 提交于 2020-12-19 04:53:03
一、MVVM分层概述 MVVM中,各个部分的职责如下: Model: 负责数据实体的结构处理,与ViewModel进行交互; View: 负责界面显示,与ViewModel进行数据和命令的交互; ViewModel: 负责前端视图业务级别的逻辑结构组织,并将其反馈给前端。 二、MVVMLight框架初探 通过NuGet安装MVVM Light 框架后,我们新建的Wpf项目中会自动生成一个ViewModel文件夹,里面有MainViewModel.cs和ViewModelLocator.cs两个文件。 下面我们就首先分析下这两个文件的内容: MainViewModel.cs文件分析: MainViewModel.cs文件中只有一个类MainViewModel,该类是主窗口MainWindow对应的ViewModel,继承自类ViewModelBase ViewModelBase类又继承类ObservableObject,同时实现ICleanup接口 ObservableObject类实现INotifyPropertyChanged接口,用于通知属性的改变 由此分析,我们可以得出以下一般结论: 当我们定义一个自己的ViewModel时,一般让自定义ViewModel继承自ViewModelBase类,这样当ViewModel中属性发生变化的时候,就可以自动通知对应的VIew。

应用界面美化

六月ゝ 毕业季﹏ 提交于 2020-12-18 10:51:22
下载DevExpress v20.2完整版 上DevExpress中文网,获取第一手最新产品资讯! 通过 DevExpress WPF Controls ,您能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 在下载并安装新的Scheduler Control后,技术团队针对WPF的性能和开发范例对产品进行了优化。 性能 下表有助于总结新的Scheduler与旧的Scheduler之间的区别,性能已经得到了很大的提升。 从提高的渲染速度到快速的滚动和记录加载,新的WPF Scheduler在设计时考虑了最困难的性能用例。 100% WPF 与旧版本不同,新的WPF Scheduler 是为了充分利用MVVM和WPF自定义(模板,样式)而构建的。 开始使用新的Scheduler后,您会发现可以完全控制其视图模型(单元格/约会选择、约会编辑等),并使用标准WPF方法自定义控件。 以下迁移指南可以帮助您将项目从较旧的项目迁移到新的Scheduler Control。 迁移指南 项目参数和命名空间: 删除对DevExpress.Xpf.Scheduler.v17.2.dll程序集的引用,添加对DevExpress.Xpf.Scheduling.v17.2.dll程序集的引用。 将 XAML xmlns:dxsch="http: