Questions tagged «mvvm»

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

3
AndroidViewModel与ViewModel
随着Android Architecture Components库的引入,引入了几个新类,包括AndroidViewModel和ViewModel。但是,我很难弄清楚这两个类之间的区别。该文档简要描述AndroidViewModel如下: 应用程序上下文感知 ViewModel 我很简短,但是这意味着什么呢?我们什么时候应该选择使用AndroidViewModelover ViewModel,反之亦然?

3
在带有MVVM的wpf中使用Dialog的好还是坏做法?
我最近遇到了为wpf应用程序创建添加和编辑对话框的问题。 我想在代码中做的就是这样。(我主要在mvvm中使用viewmodel first方法) 调用对话框窗口的ViewModel: var result = this.uiDialogService.ShowDialog("Dialogwindow Title", dialogwindowVM); // Do anything with the dialog result 它是如何工作的? 首先,我创建了一个对话框服务: public interface IUIWindowDialogService { bool? ShowDialog(string title, object datacontext); } public class WpfUIWindowDialogService : IUIWindowDialogService { public bool? ShowDialog(string title, object datacontext) { var win = new WindowDialog(); win.Title = title; …
148 c#  .net  wpf  mvvm  modal-dialog 

12
使用WPF / MVVM Light Toolkit处理窗口关闭事件
我想处理Closing我窗口的事件(当用户单击右上角的“ X”按钮时),以便最终显示确认消息或/和取消关闭。 我知道如何在后面的代码中执行此操作:订阅Closing窗口的事件,然后使用CancelEventArgs.Cancel属性。 但是我使用的是MVVM,所以我不确定这是个好方法。 我认为好的方法是将Closing事件绑定到Command我的ViewModel中。 我尝试过: <i:Interaction.Triggers> <i:EventTrigger EventName="Closing"> <cmd:EventToCommand Command="{Binding CloseCommand}" /> </i:EventTrigger> </i:Interaction.Triggers> RelayCommand在我的ViewModel中带有一个关联,但是它不起作用(命令的代码未执行)。
145 c#  wpf  xaml  mvvm  mvvm-light 

9
MVVM模板的好例子
我目前正在使用Microsoft MVVM模板,发现缺少详细示例令人沮丧。包含的ContactBook示例只显示了很少的命令处理,而我发现的唯一另一个示例是从MSDN Magazine文章中获得的,该示例的概念相似,但使用的方法略有不同,但仍然没有任何复杂性。是否有任何不错的MVVM示例,至少显示了基本的CRUD操作和对话框/内容切换? 每个人的建议都非常有用,我将开始汇编一份很好的资源清单 框架/模板 WPF模型-视图-视图模型工具包 MVVM Light工具包 棱镜 卡利本 肚带 有用的文章 具有Model-View-ViewModel设计模式的WPF应用 .NET 3.5中的数据验证 使用ViewModel提供有意义的验证错误消息 基于动作的ViewModel和模型验证 对话方块 MVVM中的命令绑定 不仅仅是WPF的MVC MVVM +介体示例应用 截屏 Jason Dolinger在模型-视图-视图模型上 附加图书馆 WPF Disciples改进了Mediator Pattern的实现(对于具有更复杂导航的应用程序,我强烈建议这样做) MVVM Light工具包Messenger
141 wpf  mvvm 

2
什么是WPF棱镜?
最近我经常碰到一种叫做Prism的东西。运行该项目的Microsoft将其描述为 WPF和Silverlight中的复合应用程序准则。 恐怕即使在阅读了更详细的说明之后,我也几乎不知道它的实际含义。 我希望在这里有人可以给我一个清晰简洁的解释,关于棱镜实际上是什么以及为什么我应该学习它。我已经是WPF开发人员两年了,我使用了MVVM,并且最近遇到了使用Prism的人,但是我个人对此有点不了解。 特别是,我想知道以下几点: 正如MSDN站点上所提供的, Prism实际上只是(或主要是)一本小册子吗?它是否包括任何库(如果有的话)到底是什么? Prism是MVVM框架吗?我是否应该将它用作“正式的Microsoft MVVM框架”而不是我自己的? 它提供依赖注入吗?这样是否完全与MEF有关? 作为WPF / Silverlight开发人员,我对Prism所做的任何其他了解。
137 wpf  mvvm  prism 

21
从视图模型将焦点放在WPF中的TextBox上
我认为a TextBox和a Button。 现在,我在单击按钮时检查条件,如果条件结果为假,则向用户显示消息,然后将光标设置到TextBox控件。 if (companyref == null) { var cs = new Lipper.Nelson.AdminClient.Main.Views.ContactPanels.CompanyAssociation(); MessageBox.Show("Company does not exist.", "Error", MessageBoxButton.OK, MessageBoxImage.Exclamation); cs.txtCompanyID.Focusable = true; System.Windows.Input.Keyboard.Focus(cs.txtCompanyID); } 上面的代码在ViewModel中。 该CompanyAssociation是视图名称。 但是光标没有在中设置TextBox。 xaml是: <igEditors:XamTextEditor Name="txtCompanyID" KeyDown="xamTextEditorAllowOnlyNumeric_KeyDown" ValueChanged="txtCompanyID_ValueChanged" Text="{Binding Company.CompanyId, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Width="{Binding ActualWidth, ElementName=border}" Grid.Column="1" Grid.Row="0" VerticalAlignment="Top" HorizontalAlignment="Stretch" Margin="0,5,0,0" IsEnabled="{Binding Path=IsEditable}"/> <Button Template="{StaticResource …
129 c#  wpf  xaml  mvvm  textbox 

6
将只读GUI属性推回ViewModel中
我想编写一个ViewModel,它总是从View知道某些只读依赖项属性的当前状态。 具体来说,我的GUI包含FlowDocumentPageViewer,它一次显示FlowDocument中的一页。FlowDocumentPageViewer公开了两个名为CanGoToPreviousPage和CanGoToNextPage的只读依赖项属性。我希望我的ViewModel始终知道这两个View属性的值。 我认为我可以使用OneWayToSource数据绑定来做到这一点: <FlowDocumentPageViewer CanGoToNextPage="{Binding NextPageAvailable, Mode=OneWayToSource}" ...> 如果允许这样做,那将是完美的:每当FlowDocumentPageViewer的CanGoToNextPage属性发生更改时,新值将被下推到ViewModel的NextPageAvailable属性中,这正是我想要的。 不幸的是,这无法编译:我收到一条错误消息,提示“ CanGoToPreviousPage”属性为只读属性,无法从标记中进行设置。显然,只读属性不支持任何类型的数据绑定,甚至不支持相对于该属性为只读的数据绑定。 我可以将ViewModel的属性设置为DependencyProperties,并进行另一种方式的OneWay绑定,但是我对关注分离冲突并不感到疯狂(ViewModel需要引用View,而MVVM数据绑定应该避免该视图)。 FlowDocumentPageViewer不会公开CanGoToNextPageChanged事件,而且我不知道从DependencyProperty获取更改通知的任何好方法,而没有创建另一个DependencyProperty绑定到该事件的方法,这似乎是过分的。 如何使ViewModel知道视图的只读属性的更改?


11
WPF中的MVVM-如何向ViewModel发出模型更改的警报…还是应该?
我正在阅读一些MVVM文章,主要是this和this。 我的具体问题是:如何将模型更改从模型传递到ViewModel? 在Josh的文章中,我看不到他这样做。ViewModel总是向模型询问属性。在Rachel的示例中,她确实具有模型实现INotifyPropertyChanged,并从模型中引发事件,但是这些事件仅供视图本身使用(有关执行此操作的详细信息,请参阅她的文章/代码)。 我在哪里都看不到模型向ViewModel发出模型属性更改警报的示例。这让我担心也许由于某些原因未完成。 有没有一种模式可以提醒ViewModel模型中的更改? 似乎有必要,因为(1)可以想象每个模型有多个ViewModel,并且(2)即使只有一个ViewModel,对模型的某些操作也可能导致其他属性被更改。 我怀疑可能会有“为什么要这样做?”形式的答案/评论。注释,所以这是我的程序的描述。我是MVVM的新手,所以我的整体设计可能有问题。我将简要描述一下。 我正在编写比“客户”或“产品”类更有趣的东西(至少对我来说!)。我正在编程BlackJack。 我有一个View,它没有任何代码,仅依赖于绑定到ViewModel中的属性和命令(请参阅Josh Smith的文章)。 是好还是坏,我把该模型应该不仅包含类,如态度PlayingCard,Deck但也BlackJackGame认为保持整场比赛的状态类的,知道什么时候该玩家已经破产,经销商有画卡,玩家和发牌人当前的得分是多少(小于21、21,半身等)。 从BlackJackGame我开始,我公开了“ DrawCard”之类的方法,然后想到在绘制卡片时CardScore,IsBust应该更新诸如和的属性,并将这些新值传递给ViewModel。也许那是错误的想法? 可以采取ViewModel调用该DrawCard()方法的态度,因此他应该知道要求更新分数,并确定自己是否破产。意见? 在我的ViewModel中,我有逻辑来获取纸牌的实际图像(基于西服,等级)并将其用于视图。该模型不必为此担心(也许其他ViewModel只会使用数字而不是纸牌图像)。当然,也许有人会告诉我,该模型甚至不应该具有BlackJack游戏的概念,而应该在ViewModel中进行处理?
112 c#  .net  wpf  mvvm 

23
AngularJS浏览器通过使用指令自动填充的解决方法
在AngularJS中提交表单并使用浏览器时,请记住密码功能,并且在随后的登录尝试中,让浏览器使用用户名和密码填写登录表单,该$scope模型不会基于自动填充进行更改。 我发现的唯一肮脏的技巧是使用以下指令: app.directive("xsInputSync", ["$timeout" , function($timeout) { return { restrict : "A", require: "?ngModel", link : function(scope, element, attrs, ngModel) { $timeout(function() { if (ngModel.$viewValue && ngModel.$viewValue !== element.val()) { scope.apply(function() { ngModel.$setViewValue(element.val()); }); } console.log(scope); console.log(ngModel.$name); console.log(scope[ngModel.$name]); }, 3000); } }; }]); 问题在于,ngModel.$setViewValue(element.val());基于element.val()返回的值不会更改模型或视图。我该怎么做?

9
Android ViewModel附加参数
AndroidViewModel除了Application上下文,是否有办法将其他参数传递给我的自定义构造函数。例: public class MyViewModel extends AndroidViewModel { private final LiveData<List<MyObject>> myObjectList; private AppDatabase appDatabase; public MyViewModel(Application application, String param) { super(application); appDatabase = AppDatabase.getDatabase(this.getApplication()); myObjectList = appDatabase.myOjectModel().getMyObjectByParam(param); } } 当我想使用我的自定义ViewModel类时,在片段中使用以下代码: MyViewModel myViewModel = ViewModelProvider.of(this).get(MyViewModel.class) 所以我不知道如何将其他参数传递String param给我的自定义ViewModel。我只能传递应用程序上下文,而不能传递其他参数。我将非常感谢您的帮助。谢谢。 编辑:我添加了一些代码。我希望现在会更好。

10
使用MVVM从WPF ListView项触发双击事件
在使用MVVM的WPF应用程序中,我有一个带listview项的usercontrol。在运行时,它将使用数据绑定将对象集合填充到列表视图中。 将双击事件附加到列表视图中的项目的正确方法是什么,以便双击列表视图中的项目时,将触发视图模型中的相应事件并具有对被单击项目的引用? 如何以干净的MVVM方式完成操作,即视图中没有任何代码?
102 wpf  mvvm 

9
如何在WPF / MVVM应用程序中处理依赖项注入
我正在启动一个新的桌面应用程序,我想使用MVVM和WPF进行构建。 我也打算使用TDD。 问题是我不知道如何使用IoC容器将依赖项注入生产代码中。 假设我具有以下类和接口: public interface IStorage { bool SaveFile(string content); } public class Storage : IStorage { public bool SaveFile(string content){ // Saves the file using StreamWriter } } 然后我有另一个具有IStorage依赖关系的类,还假设该类是ViewModel或业务类... public class SomeViewModel { private IStorage _storage; public SomeViewModel(IStorage storage){ _storage = storage; } } 有了这个,我可以轻松地编写单元测试,以确保它们能够正常工作,例如使用模拟等。 问题是要在实际应用程序中使用它。我知道我必须有一个链接IStorage接口的默认实现的IoC容器,但是我该怎么做呢? 例如,如果我具有以下xaml,将如何处理: <Window …

5
如何使用DataContext属性在XAML中的窗口上设置ViewModel?
这个问题几乎说明了一切。 我有一个窗口,并尝试使用完整的名称空间将DataContext设置为ViewModel,但是我似乎做错了。 <Window x:Class="BuildAssistantUI.BuildAssistantWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" DataContext="BuildAssistantUI.ViewModels.MainViewModel">
96 .net  wpf  xaml  mvvm 

17
从ViewModel关闭窗口
我使用创建了一个Login,window control以允许用户登录到WPF我正在创建的应用程序。 到目前为止,我已经创建了一个检查用户是否已经在为正确的凭据进入了一个方法username,并password在textbox登录屏幕,上binding2 properties。 我是通过创建一个bool像这样的方法来实现的。 public bool CheckLogin() { var user = context.Users.Where(i => i.Username == this.Username).SingleOrDefault(); if (user == null) { MessageBox.Show("Unable to Login, incorrect credentials."); return false; } else if (this.Username == user.Username || this.Password.ToString() == user.Password) { MessageBox.Show("Welcome " + user.Username + ", you have successfully logged …
95 c#  wpf  mvvm 

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.