jjzjj

c# - M-V-VM,Model不是漏进了View吗?

众所周知,M-V-VM的要点在于关注点的分散。在MVVM、MVC或MVP等模式中,主要目的是将View与数据解耦,从而构建更灵活的组件。我将首先演示在许多WPF应用程序中发现的一个非常常见的场景,然后我将说明我的观点:假设我们有一些StockQuote应用程序,它流式传输一堆报价并将它们显示在屏幕上。通常,你会有这样的:StockQuote.cs:(模型)publicclassStockQuote{publicstringSymbol{get;set;}publicdoublePrice{get;set;}}StockQuoteViewModel.cs:(View模型)publiccl

c# - 在 WPF M-V-VM 中撤消,它如何适应?

在我以前的项目中,我已经用c++实现了撤销系统,我知道它是如何工作的。我也知道命令模式。我将实现一个C#/WPF桌面应用程序,并希望我的设计基于M-V-VM模式。应用程序将:是一个相对较小的项目(1名开发人员预计工作2-3周)拥有一个具有持久性的简单数据模型(linqtoXML)支持撤销/重做我想知道是否有人在遵循M-V-VM模式时有过实现撤消系统的经验。它如何适合它?它如何从INotifyPropertyChanged和INotifyCollectionChanged通知中获益,以便在实现模型(业务对象)时需要最少的工作。我认为撤消系统会以某种方式集成到ViewModel层中,因为它

c# - 关闭 VM 会将所有 VM 状态返回为未知

当使用以下方法关闭和查询角色实例时。当我关闭VM时,所有其他角色实例都返回,状态为就绪状态未知。大约几分钟后,我可以再次查询并获得实际状态。如何使用Azure管理API实时获取实际状态。或者这是虚拟机配置方式的问题?它们配置了相同的存储位置和相同的虚拟网络显示的代码基于VisualStudio2015中部署和管理虚拟机的模板。关闭虚拟机的调用:varshutdownParams=newVirtualMachineShutdownParameters();if(deallocate)//deallocateistrueinthisinstanceshutdownParams.PostSh

c# - 在没有标准 (Obj sender, EventArgs args) 签名的情况下创建事件处理程序委托(delegate)有多错误?

我了解使用标准MS事件处理程序委托(delegate)签名的好处,因为它允许您轻松扩展通过事件传递的信息,而不会破坏任何基于旧委托(delegate)签名的旧关系。我想知道在实践中人们多久遵守一次这条规则?假设我有一个像这样的简单事件publiceventNameChangedHandlerNameChanged;publicdelegatevoidNameChangedHandler(Objectsender,stringoldName,stringnewName);这是一个简单的事件,我几乎肯定我需要从NameChanged事件中知道的唯一参数是名称更改的对象、旧名称和新名称。那么

c# - 在应用依赖注入(inject)时,Func<in T, out TResult> 是否适合用作 ctor arg?

例子:publicclassBusinessTransactionFactorywhereT:IBusinessTransaction{readonlyFunc_createTransaction;publicBusinessTransactionFactory(FunccreateTransaction){_createTransaction=createTransaction;}publicTCreate(){return(T)_createTransaction(typeof(T));}}使用相同的容器设置代码:publicclassDependencyRegistration:

c# - .NET CLR VM 中的逃逸分析

CLR编译器/JIT是否执行任何逃逸分析?例如,在Java中,一个循环变量一个在循环中分配但没有逃脱循环的对象似乎分配在堆栈上而不是堆上(参见EscapeanalysisinJava)。为了澄清,在下面的示例中,编译器是否会优化foo的堆分配,因为它永远不会逃脱循环。classFoo{intnumber;Foo(intnumber){this.number=number;}publicoverridestringToString(){returnnumber.ToString();}}for(inti=0;i 最佳答案 如果您指的是

c# - 为什么 ICommand 比调用 VM 的代码更好?

我有一个同事问我为什么他必须使用ICommand模式。他想添加一个按钮,然后在后面的代码中为它创建一个事件。然后从事件中他想调用ViewModel上的方法。我给了他一个明显的答案:这增加了View和ViewModel之间的耦合。但他认为View和ViewModel已经耦合。(我们在View后面的代码中将View的DataContext设置为ViewModel:DataContext=newMyViewModel();是的,我告诉他他的方式增加了“更多的耦合”,但即使对我来说听起来也有点蹩脚。所以,我知道ICommand是最干净的方式,我就是这样做的。但是除了不使用现有的耦合器之外,IC

c# - += (o, arg) => 实际实现的是什么?

很抱歉问大家,但我是Vb.net的老手,正在转向C#。我有以下一段代码,当(在这种情况下)postAsync方法被触发时,它似乎被激活。我只是不明白代码在做什么(如下所示):-app.PostCompleted+=(o,args)=>{if(args.Error==null){MessageBox.Show("Picturepostedtowallsuccessfully.");}else{MessageBox.Show(args.Error.Message);}};如果有人能解释+=(o,args)=>实际上实现了什么,我将非常感激....非常感谢。蒂姆

javascript - Aurelia:从子 VM 中访问父 VM 方法

使用列表的一个常见用例是从列表项中访问列表的方法。例如:项目项可以选择从包含列表中删除自己。我想知道我在下面为Aurelia描述的模式是否有效,或者是否有更好的解决方案。在Aurelia中,我有以下设置:包含列表:(project-list.html和projectList.js)和子项:(project-item和projectItem.js)${project.name}在这种情况下,deleteProject(project)是projectListVM的成员:functiondeleteProject(project){varindex=this.projects.indexO

javascript - DataTables 问题 : VM9075 dataTables. min.js:24Uncaught TypeError: 无法设置未定义的属性 '_DT_CellIndex'

我刚开始使用DataTables,创建表格时一切正常。当我在表中显示5、24、47行时,DataTables的行为符合我的预期。但我有这个大约有700行的表,我在GoogleChrome中收到错误,"VM9075dataTables.min.js:24UncaughtTypeError:Cannotsetproperty'_DT_CellIndex'ofundefined"在IE9中,"SCRIPT5007:Unabletosetvalueoftheproperty'_DT_CellIndex':objectisnullorundefinedjquery-1.10.2.min.js,l