Questions tagged «mvvm»

Model-View-ViewModel(MVVM)是用于实现用户界面的体系结构设计模式,该模式通过其表示逻辑(其ViewModel)将UI(视图)与其数据(模型)分离。

8
MVVM没有意义吗?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 正统的MVVM实现是没有意义的吗?我正在创建一个新的应用程序,并且考虑了Windows Forms和WPF。我选择WPF是因为它可以面向未来并且具有很大的灵活性。使用XAML的代码更少,可以更轻松地对UI进行重大更改。 由于WPF的选择是显而易见的,因此我认为,最好还是使用MVVM作为我的应用程序体系结构,因为它提供了可混合性,分离性和单元可测试性。从理论上讲,它看起来像UI编程的圣杯一样美丽。这短暂的冒险;但是,已经变成了真正的头痛。正如实践中所期望的,我发现我已经将一个问题换成了另一个。我倾向于成为一个痴迷的程序员,因为我想以正确的方式做事,以便获得正确的结果,并有可能成为更好的程序员。MVVM模式使我的生产力测试不及格,并且变成了一个巨大的麻烦! 最明显的例子就是增加了对“模态”对话框的支持。正确的方法是建立一个对话框并将其绑定到视图模型。使其难以工作。为了从MVVM模式中受益,您必须在应用程序的各个层中的多个位置分发代码。您还必须使用诸如模板和lamba表达式之类的深奥编程结构。东西使您凝视屏幕,挠挠头。正如最近发现的那样,这使得维护和调试成为一场噩梦。我有一个about框可以正常工作,直到我第二次调用它时出现异常,然后说它一旦关闭就无法再次显示该对话框。我必须为对话框的关闭功能添加一个事件处理程序,IDialogView实现中的另一个,最后是IDialogViewModel中的另一个。我以为MVVM可以将我们从如此奢侈的黑客中拯救出来! 有好几个人在为这个问题提供竞争解决方案,他们都是黑客,不能提供干净,易于重用的优雅解决方案。大多数MVVM工具箱都会掩盖对话框,当它们确实解决对话框时,它们只是警报框,不需要自定义界面或视图模型。 我打算放弃MVVM视图模式,至少是它的正统实现。你怎么看?如果您有任何麻烦,对您来说值得吗?我只是一个能力不强的程序员,还是MVVM并不是它所宣传的那样?
91 .net  wpf  mvvm 

5
在vuejs中是否有适当的方法来重置组件的初始数据?
我有一个带有一组特定的起始数据的组件: data: function (){ return { modalBodyDisplay: 'getUserInput', // possible values: 'getUserInput', 'confirmGeocodedValue' submitButtonText: 'Lookup', // possible values 'Lookup', 'Yes' addressToConfirm: null, bestViewedByTheseBounds: null, location:{ name: null, address: null, position: null } } 这是模态窗口的数据,因此当它显示我希望它以该数据开始时。如果用户从窗口取消,我想将所有数据重置为此。 我知道我可以创建一种方法来重置数据,只需手动将所有数据属性设置回其原始状态即可: reset: function (){ this.modalBodyDisplay = 'getUserInput'; this.submitButtonText = 'Lookup'; this.addressToConfirm = null; this.bestViewedByTheseBounds = null; …

13
如何在Android MVVM ViewModel中获取上下文
我正在尝试在android应用中实现MVVM模式。我已经读过ViewModels应该不包含任何android特定代码(以使测试更容易),但是我需要对各种事物使用上下文(从xml获取资源,初始化首选项等)。做这个的最好方式是什么?我看到AndroidViewModel有对应用程序上下文的引用,但是其中包含android特定的代码,因此我不确定是否应该在ViewModel中使用它。那些也与Activity生命周期事件相关联,但是我使用匕首来管理组件的范围,所以我不确定这将如何影响它。我是MVVM模式和Dagger的新手,所以感谢您的帮助!

1
如何使用jQuery-Mobile和Knockout.js构建Web应用程序
我想构建一个移动应用程序,仅用html / css和JavaScript编写。虽然我对如何使用JavaScript构建Web应用程序有相当的了解,但我认为我可以研究一下jquery-mobile之类的框架。 起初,我认为jquery-mobile只是针对移动浏览器的小部件框架。与jquery-ui非常相似,但适用于移动世界。但我注意到jquery-mobile不仅如此。它带有许多体系结构,让您使用声明性html语法创建应用。因此,对于最容易思考的应用程序,您无需自己编写一行JavaScript(这很酷,因为我们都喜欢减少工作量,不是吗?) 为了支持使用声明性html语法创建应用程序的方法,我认为将jquery-mobile与kickoutjs结合起来是一个好方法。Knockoutjs是一个客户端MVVM框架,旨在将WPF / Silverlight中已知的MVVM超级功能引入JavaScript世界。 对我而言,MVVM是一个新世界。虽然我已经阅读了很多关于它的内容,但是我以前从未真正使用过它。 因此,这篇文章是关于如何一起使用jquery-mobile和kickoutjs构建应用程序的。我的想法是写下看了几个小时后想到的方法,并用一些jquery-mobile / knockout yoda进行评论,向我展示为什么它很烂,以及为什么我不应该一开始就进行编程地方;-) HTML jquery-mobile很好地提供了页面的基本结构模型。尽管我很清楚以后可以通过ajax加载我的页面,但我只是决定将所有页面保存在一个index.html文件中。在这种基本情况下,我们谈论的是两页,因此掌握所有内容并不难。 <!DOCTYPE html> <html> <head> <title>Page Title</title> <link rel="stylesheet" href="libs/jquery-mobile/jquery.mobile-1.0a4.1.css" /> <link rel="stylesheet" href="app/base/css/base.css" /> <script src="libs/jquery/jquery-1.5.0.min.js"></script> <script src="libs/knockout/knockout-1.2.0.js"></script> <script src="libs/knockout/knockout-bindings-jqm.js" type="text/javascript"></script> <script src="libs/rx/rx.js" type="text/javascript"></script> <script src="app/App.js"></script> <script src="app/App.ViewModels.HomeScreenViewModel.js"></script> <script src="app/App.MockedStatisticsService.js"></script> <script src="libs/jquery-mobile/jquery.mobile-1.0a4.1.js"></script> </head> <body> <!-- Start …

5
MVVM的基本概念-ViewModel应该做什么?
为了掌握MVVM的概念,我已经阅读了几个博客,并研究了一些项目。 据我了解,一个视图是愚蠢的,它只知道如何呈现传递给它的东西。 模型只是纯数据,而ViewModel的作用类似于两者之间的填充,它应该从Model中获取信息并将其传递给View,并且View应该知道如何呈现它。否则,如果View中的信息发生更改,则应将更改传递给Model。 但是我仍然不知道如何应用这个概念。有人可以解释一个非常简单的情况,以便我可以理解这个概念吗?我已经看过几个项目,但是仍然没有完全意义,因此,如果有人可以用简单的英语写出来,那就太好了。
83 mvvm 


3
WPF MVVM为什么使用ContentControl + DataTemplate视图而不是直接的XAML窗口视图?
为什么这个? MainWindow.xaml: <Window x:Class="MVVMProject.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <Grid> <ContentControl Content="{Binding}"/> </Grid> </Window> 将您的ExampleView.xaml设置为: <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:vms="clr-namespace:MVVMProject.ViewModels"> <DataTemplate DataType="{x:Type vms:ExampleVM}" > <Grid> <ActualContent/> </Grid> </DataTemplate> </ResourceDictionary> 并创建如下窗口: public partial class App : Application { protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); MainWindow app = new MainWindow(); ExampleVM context = new ExampleVM(); …
83 c#  wpf  xaml  mvvm  architecture 

21
WPF MVVM:如何关闭窗口
我有一个Button它被点击时关闭我的窗口: <Button x:Name="buttonOk" IsCancel="True">Ok</Button> 没关系,直到我Command在Buttonie中添加一个 <Button x:Name="buttonOk" Command="{Binding SaveCommand}" IsCancel="True">Ok</Button> 现在大概无法关闭,因为我正在处理Command。我可以通过插入EventHandler并调用this.Close()即解决此问题 <Button x:Name="buttonOk" Click="closeWindow" Command="{Binding SaveCommand}" IsCancel="True">Ok</Button> 但现在我的代码后面有代码,即方法SaveCommand。我正在使用MVVM模式,这SaveCommand是我的代码后面唯一的代码。 我该怎么做才能不使用后面的代码?
78 c#  .net  wpf  xaml  mvvm 

13
为什么要使用MVVM?
好的,我一直在研究MVVM模式,每次以前尝试进行研究时,出于以下原因我都放弃了: 不必要的超长编码 对于编码人员没有明显的优势(我的办公室没有设计师。目前只有我自己很快将成为另一个编码人员) 良好实践的资源/文档不多!(或者至少很难找到) 无法想到一个有利的单一方案。 我将再次放弃它,以为我要问是否有人回答了上述原因。 老实说,我看不出将其用于单个/合作伙伴编码的优势。即使在具有十个窗口的复杂项目中。对我来说,DataSet是一个足够好的视图和绑定,就像布伦特在以下问题中的回答一样 有人可以显示一个示例,与XAML DataBinding相比,使用MVVM模式可以节省时间。 目前,我100%的绑定是在XAML中完成的。因此,我不认为VM的意义在于它只是我需要编写和依赖的额外代码。 编辑: 在花了一个下午的时间研究MVVM之后,我终于找到了使我意识到此答案的真正好处的东西。
77 c#  wpf  mvvm 

4
构建敲除js绑定时隐藏屏幕的最佳方法是什么?
我是淘汰赛的忠实粉丝。我现在将其用于我的所有Web开发,并且很喜欢它。我无法弄清的一件事是如何在构建基因敲除js绑定时隐藏UI。 例如,我有一个非常健壮的用户界面,页面上使用了许多模板。我注意到的问题是,当用户首次访问该页面时,他们会在一秒钟内看到我的所有模板,然后才开始绑定并隐藏它们。 解决此问题的最佳方法是什么?我曾尝试使用帮助器类来隐藏它们,但是除非我删除了帮助器类引用(即ui-helper-hidden),否则无法使用“可见”和“ if”绑定显示模板。


24
无法创建类ViewModel的实例
我正在尝试使用Android体系结构组件编写示例应用程序,但是即使尝试了几天,我仍然无法使它正常工作。它给了我上面的例外。 生命周期所有者:- public class MainActivity extends LifecycleActivity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView textView = findViewById(R.id.tv_user); PostViewModel viewModel = ViewModelProviders.of(this).get(PostViewModel.class); viewModel.loadPosts(); viewModel.getPost().observe(this, new Observer<Post>() { @Override public void onChanged(@Nullable Post post) { if(post != null) { textView.setText(post.toString()); } } }); } } ViewModel:- public class PostViewModel extends …


16
如何将UI Dispatcher传递给ViewModel
我应该能够访问属于View的Dispatcher,我需要将其传递给ViewModel。但是View应该对ViewModel一无所知,那么如何传递它呢?引入接口还是将其传递给实例,而不是创建将由View编写的全局调度程序单例?您如何在MVVM应用程序和框架中解决此问题? 编辑:请注意,由于我的ViewModels可能是在后台线程中创建的,所以我不能只Dispatcher.Current在ViewModel的构造函数中做。
74 .net  wpf  mvvm  dispatcher 

4
如何将TabControl绑定到ViewModels的集合?
基本上我在MainViewModel.cs中: ObservableCollection<TabItem> MyTabs { get; private set; } 但是,我需要以某种方式不仅可以创建选项卡,还可以在维护MVVM的同时将选项卡的内容加载并链接到其相应的视图模型。 基本上,我如何才能将用户控件作为Tabitem的内容加载,并将该用户控件连接到适当的视图模型。造成这一困难的部分是ViewModel不应构造实际的视图项,对吗?可以吗 基本上,这是否适合MVVM: UserControl address = new AddressControl(); NotificationObject vm = new AddressViewModel(); address.DataContext = vm; MyTabs[0] = new TabItem() { Content = address; } 我只问是因为好了,我是从ViewModel构造一个View(AddressControl),对我来说这听起来像是MVVM。
73 c#  wpf  mvvm  tabcontrol  tabitem 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.