Tag: viewmodel

下载菜单中的自动映射IEnumerable

问题 我目前正在为我的MVC项目添加自动化,而且我被困住了。 现在我有一个User模型用于表示数据库中的数据。 我必须将该模型映射到EditUserModel,它将在调用Edit方法时使用。 EditUserModel有IEnumerable (对于下拉菜单),我似乎无法弄清楚如何映射。 试图解决方案 截至目前,我还没有尝试过任何事情。 我不确定IEnumerable的最佳位置在哪里或填充它的位置。 现在它正在控制器中填充。 User.cs public class User { [Key] public int UserID { get; set; } public string Username { get; set; } public string Password { get; set; } public int RoleID { get; set; } [ForeignKey(“RoleID”)] public virtual Role Role { get; set; } } EditUserModel.cs […]

使用Get将ASP.Net MVC中的ViewModel从View传递到另一个View

我有一个列表视图,它有一个强类型的ViewModel,它包含我正在使用的实体列表以及我正在携带的其他会话类型的东西。 单击列表中的项目(Html.ActionLink)转到“详细信息”视图时,我可以轻松传递实体ID。 但我也希望从View中传递ViewModel的其余部分。 我可以使用各种QueryString参数构建ActionLink,然后自定义ModelBinder可以拾取它们并再次为我提供ViewModel对象。 但是,我不喜欢这个。 我可以让自定义ViewModel在POST回到同一页面等时重新水化,但是如何在不使用ModelBinder的情况下使用GET将ViewModel转换为另一个View的Controller Action,只需将ViewModel对象放置为目标Action方法中的参数?

在呈现/实例化View时通知ViewModel

我有一个自定义usercontrol( ChartControl ),我在我的WPF应用程序( MainApp )中使用,我呈现如下: 启动MainApp后, MainApp给定顺序执行以下操作: MainApp查看MainApp ViewModel ChartControl ViewModel ChartControl视图 我从ChartControl ViewModel的构造函数中实例化MainApp ViewModel。 问题是在实例化ChartControl ViewModel后,我还需要从MainApp调用ChartControl的方法。 我遇到的问题是,在调用方法作为其viewmodel的一部分之前,我需要渲染ChartControl视图(执行其InitializeComponent )。 我认为一个解决方案可能是在完全实例化和设置时从视图中通知视图模型。 这是一个可行的解决方案,如果是,我该怎么做? 总之,我需要在调用匹配的viewmodel的方法之前完全设置视图。 我遇到的问题是,在这种情况下,视图模型首先被实例化,然后才会呈现视图。 有任何想法吗? 谢谢

Windows Phone 8 – MVVM ViewModels和App.xaml.cs

我一直在研究MVVM模式并将其应用到Windows Phone 8应用程序中,我对在应用程序中初始化和访问ViewModel的最佳实践有疑问。 当我从WP8 SDKs模板创建数据绑定应用程序时 ,我注意到App.xaml.cs文件中的这段代码: public static MainViewModel ViewModel { get { // Delay creation of the view model until necessary if (viewModel == null) viewModel = new MainViewModel(); return viewModel; } } private void Application_Activated(object sender, ActivatedEventArgs e) { // Ensure that application state is restored appropriately if (!App.ViewModel.IsDataLoaded) { App.ViewModel.LoadData(); } } […]

我应该如何在ViewModels之间进行通信?

我正在使用MVVM Light并使用打包的信使系统在视图模型之间进行通信,但是我遇到了一些两难的问题! 基本上,当用户单击客户记录时,将打开相应的视图,并使用它来实例化CustomerViewModel 。 此时, CustomerViewModel需要来自先前视图模型( ViewAllCustomersViewModel )的所选客户ID,以便它可以获取视图所绑定的选定客户信息(仍然跟随?)。 所以最初我的想法也是将来自ViewAllCustomersViewModel (选择要查看的客户)的消息中的ID发送到CustomerViewModel …但是, CustomerViewModel未实例化为能够在加载视图之前接收消息(此时消息已经播出)! 那么,解决这个问题的最佳方法是什么? 到目前为止,我已经考虑过CustomerViewModel在实例化后向ViewAllCustomersViewModel发送请求(基本上说“我准备接收消息”),然后ViewAllCustomersViewModel将ID发送回CustomerViewModel ……但这是一个解决这个问题的必要方法? 这对我来说似乎有点难看! 否则,我在想是否有另一种沟通方式可以解释我遇到的问题? 但是,这不是消息系统的全部意义……能够在视图模型之间进行通信吗? 或者我可以强制视图模型在启动时实例化吗? 如果是这样,那将如何影响ViewModelLocator ? 我希望我已经清楚地概述了这个问题,为了解释的目的,我使用了虚构的视图模型名称…请随时编辑或建议您希望我添加的任何其他信息!

通用视图模型?

我想知道尝试制作一个采用通用视图模型的视图是一种好习惯吗? 我想知道这是因为有人提到他预计必须做很多重复的代码,除非他开始制作通用视图和通用视图模型。 所以基本上这些视图就像一组控件。 一个视图可能有2个控件(比如文本框和单选按钮),另一个视图可能有50个控件。 它们都具有相同的外观和感觉(它只是通过控制数量增长)。 基本上他认为有一个视图模型接受对象(域对象)查看它并查看50个字段并呈现正确的控件类型。 我猜一个编辑模板可以用来计算出控件但是我并没有在通用视图模型上出售。 我喜欢generics,他们可以做非常强大的事情,在某些情况下他们很好,但我不是总体上对他们疯狂,并试图不使用。 我发现大多数时候它可能会减少重复的代码,但有时会使代码变得更复杂。 当然这可能只是因为我仍然是一个相对较新的编程,它可能仍然高于我的技能水平。 我遇到的下一个问题是我认为视图模型应该尽可能平坦,并且只暴露实际将要使用的数据,这样人们就不会开始使用从未在视图中出现过的属性。 我遇到的下一个问题是,如果你有一些复杂的对象,其中包含有对象的对象,它就可以继续运行。 它可能会持续很长时间。

在asp.net-mvc中,使用Base ViewModel在Site.Master页面上显示动态内容的最佳方法是什么

我有一个asp.net-mvc网站,我希望在每个页面上显示一些信息。 我创建了一个名为BaseViewModel的类,每个viewModel类都inheritance自BaseViewModel。 Site.Master视图直接绑定到BaseViewModel。 现在,基类有一个名为MenuLinks的属性。 menulinks属性从数据库调用填充,因此在每个控制器操作上,我正在添加一个新行:ViewModel: viewModel.MenuLinks = _repository.GetMenuLinks(); 我有很多控制器,动作和视图模型。 有没有更清洁的方法,我可以做到上述,而不必将这一行放在每一个控制器动作上面。

MVVMLight UserControl视图模型 – 为每个视图创建新的用户控件实例

我有一个用户控制我在其他视图中使用的患者列表。 但是,当我选择其中一个患者时,选择将传播到包含用户控件实例的所有视图。 如何让每个视图为每个视图实例化一个用户控件的新实例? 我正在使用c#

如何更新子视图模型时如何更新父视图模型

在我的第一个视图模型(重命名为MainViewModel)中,我有一个ActionViewModel列表。 在我的xaml中,我有一个绑定到列表的列表框,在列表框中我有一个模板,它绑定到ActionViewModel的属性。 到目前为止一切都很好,一切正常。 选择其中一个列表项时,我会导航到ActionViewModel并使用它传递id。 ActionViewModel从内存中的静态列表中检索信息,MainViewModel还从中检索信息以创建actionviewmodel列表。 到目前为止仍然很好,我可以编辑属性,所有绑定工作正常,我很高兴。 通过单击保存按钮,信息将被收集并存储在静态列表中。 当我点击后退按钮时,我会返回列表,但遗憾的是显示的值仍然相同,是否有某种方法可以发送命令重新加载列表中的项目? 传递一个完整的viewmodel作为对新ActionViewModel的引用? 或者某些属性告诉父母’你的列表中的这个视图模型已被更新’? 我确信上面的文字有点令人困惑,所以这里有一些代码来澄清它(希望如此) MainViewModel.cs private List _actionViewModels; public List ActionViewModels { get { return _actionViewModels; } set { _actionViewModels = value; RaisePropertyChanged(() => ActionViewModels); } } private Cirrious.MvvmCross.ViewModels.MvxCommand _navigateToAction; public System.Windows.Input.ICommand NavigateToAction { get { _navigateToAction = _navigateToAction ?? new Cirrious.MvvmCross.ViewModels.MvxCommand((action) => NavigateToTheDesiredAction(action)); return _navigateToAction; } } […]

从另一个viewmodel更新viewmodel

我有两个ViewModel,一个连接到主窗口,另一个连接到子窗口,通过单击主窗口上的按钮打开。 子窗口包含一个项目列表,我想选择一个项目,并通过更新主窗口视图模型在主窗口中显示它。 实现这一目标的最佳方法是什么? 谢谢!