初识viewBinding,ViewModel,liveData,dataBinding
全部标签 我正在构建一个基于MVVM-Light的应用程序。我需要创建同一个View的多个实例,每个实例都应该绑定(bind)到它自己的ViewModel。默认的ViewModelLocator将ViewModel实现为单例,因此同一View的不同实例将绑定(bind)到同一ViewModel。我可以在VMLocator中将ViewModel创建为非静态对象(就像返回新的VM()...一样简单),但这只能部分帮助我。事实上,我仍然需要跟踪打开的窗口。然而,每个窗口可能会打开其他几个窗口(尽管类型不同)。在这种情况下,我可能需要对父View及其所有subview执行一些操作。例如,在关闭ViewP
假设我有三个类,它们是基类的子类:publicclassBaseClass{publicstringBaseName{get;set;}}publicclassSubclass1:BaseClass{publicstringSubName1{get;set;}}publicclassSubclass2:BaseClass{publicstringSubName2{get;set;}}publicclassSubclass3:BaseClass{publicstringSubName3{get;set;}}我想将它们映射到如下所示的ViewModel类:publicclassViewMo
我很好奇用ViewModels做什么最好。是实现接口(interface)INotifyPropertyChanged还是派生自ObservableObject更好。ObservableObject类实现了INotifyPropertyChanged并执行了一些无聊的代码,例如RaisePropertyChanged。INotifyPropertyChanged需要实现PropertyChanged事件。从我的角度来看,使用ObservableObject似乎更合乎逻辑,但在大部分教程中,他们在其ViewModel上实现了INotifyPropertyChanged接口(interfa
我是TDD的新手。我已经开始在View模型上创建我需要的属性作为普通自动属性。publicstringFirstname{get;set;}然后我创建一个测试[TestMethod][Tag("Property")]publicvoidFirstNameTest(){ViewModel=newCustomerViewModel();ViewModel.PropertyChanged+=(s,e)=>{Assert.AreEqual("Firstname",e.PropertyName);Assert.AreEqual("Test",ViewModel.Firstname);};View
我有一个项目,我将复选框的IsChecked属性与代码隐藏中的get/set绑定(bind)在一起。但是,当应用程序加载时,由于某种原因它不会更新。出于好奇,我将其精简到最基本的部分,如下所示://usingstatementsnamespaceNS{//////InteractionlogicforMainWindow.xaml///publicpartialclassMainWindow:Window{privatebool_test;publicboolTest{get{Console.WriteLine("Accessed!");return_test;}set{Console
我有一个列表框,其中的项目绑定(bind)到一个ObservableCollection。现在,我需要从viewModel中更新UI。我的View模型中没有对列表框的引用。如果我从我的ObservableCollection中删除或添加一个项目,ui会更新。基于一些其他逻辑我需要更新UI...但是ObservableCollection是一样的。如何在不向我的ObservableCollection添加或删除项目的情况下更新UI?谢谢 最佳答案 我有一个类似的问题,我想更改项目的背景,但显然项目和集合都没有改变。这是通过调用实现的:
MVVM的优点之一是ViewModel的可测试性。在我的特定情况下,我有一个VM,它在调用命令时加载一些数据,及其相应的测试:publicclassMyViewModel{publicDelegateCommandLoadDataCommand{get;set;}privateListmyData;publicListMyData{get{returnmyData;}set{myData=value;RaisePropertyChanged(()=>MyData);}}publicMyViewModel(){LoadDataCommand=newDelegateCommand(OnLo
我有单独的模型和View模型类。其中viewmodel类仅进行UI级别验证(引用:Validation:ModelorViewModel)。我可以在Controller中验证模型(vewmodel)是否有效。问:如何验证模型(带有数据注释的主要实体)。我没有使用模型对象开发View模型。只需复制属性并添加该特定View中可能需要的所有属性。//ModelClasspublicclassUser{[Required]publicstringEmail{get;set;}[Required]publicDateTimeCreated{get;set;}}//ViewModelClasspu
我有一个使用M-V-VM方法编写的应用程序。数据访问在模型中完成。如果此处发生fatalerror(例如,与数据源的连接丢失),则抛出Exception。此异常冒泡到ViewModel。但是,因为数据访问的原始触发器是数据绑定(bind),WPF吞下了这个异常(它只在应用程序在调试器下运行时记录在输出窗口中)。我宁愿这个异常保持未处理状态,这样我的应用程序范围内的未处理异常处理程序就可以拾取它、记录它并优雅地退出。我怎样才能做到这一点? 最佳答案 您可以在调度程序上对异常抛出操作进行排队。//Thispropertyisconnec
如何在多个ViewModel之间共享数据?例如,应用程序中有一个名为Project的类。publicclassProject:ModelBase{privatestring_projectName;publicstringProjectName{get{return_projectName;}set{_projectName=value;RaisePropertyChanged(()=>ProjectName);}}}在多个ViewModels应用程序中应该访问ActiveProject。在ViewModel之间共享项目的最佳方式是什么?中介者模式?(消息)静态对象单例模式(如果是怎么