问题标签 [viewmodel]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2895 浏览

wpf - TreeView 同步到视图模型中的 SelectedItem

我在 WPF TreeView 控件之上有一个 ViewModel。我希望 ViewModel 能够从 TreeView 设置和读取 SelectedItem。但是,TreeView 的 SelectedItem 属性不可绑定。

我可以在后面的代码中设置和获取选定的项目(使用 ItemContainerGenerator 和 TreeViewItem.IsSelected = true),但这会导致后面的代码和 ViewModel 之间的通信很丑陋。

有没有人有一个干净的解决方案?

0 投票
4 回答
1029 浏览

silverlight - 将通用 ViewModel 功能推入基类?

我将 MVVM 与 Prism 和 Silverlight 一起使用。我对一个模型有多种不同的看法。当我写更多视图时,他们的 ViewModel 似乎重复了很多与处理这个模型相关的通用代码。与其在所有虚拟机中重复相同的通用代码,我更倾向于将其推回模型中(这可能会过多地混淆关注点)。或者可能是一些常见的 ViewModel 基类?或者我的虚拟机可能需要它们和模型之间的第二级“共享虚拟机”?这个单一的共享实例,二级虚拟机将整合多个常规虚拟机共享的行为和状态。

对这些问题和可能的方法有何评论?


感谢您的评论。我可能应该告诉你更多关于有问题的特定“共享”VM 代码的信息。

我可以看到将一些未来代码放入 VM 基类中,但我正在查看的特定“共享”代码似乎属于模型本身实现的 INotifyPropertyChanged。这部分基于另一个线程

我不认为这违反了 SoC,因为该模型本质上是动态的。它的某些属性仅在特定时间有效。模型的动态特性不仅对 UI 很重要,适当的单元测试也会关心它。因此这个模型似乎需要一个 INotifyPropertyChanged。

对此有何评论?

0 投票
1 回答
2964 浏览

mvvm - 带有 MVVM 的 WPF 工具包 DataGrid MultiSelect

我们正在使用 WPF Toolkit 中的 WPF DataGrid,并且正在使用 MVVM。我在 MVVM 中使用 MultiSelect 时遇到了一些挑战,我确信我只是缺少一些简单的东西。在 DataGrid 中选择一行时,我可以使用 ViewModel 中的“IsSelected”来获取事件。这适用于单个选择。

如果我设置“SelectionMode=Extended”,我仍然只能在选择 DataGrid 中的第一行时获得事件。代码隐藏中的SelectionChanged 会获取每个选择事件,但我真的想在 ViewModel 中进行这项工作。我只是缺少这个 multiSelect 的简单解决方案。我还尝试将 SelectedItems (复数)绑定到一个集合以获取所有这些,但 SelectedItems 是只读的,因此无法绑定。我肯定会感谢有关如何执行此操作的任何想法,因为我无法将此方法从代码隐藏移动到 ViewModel。

0 投票
1 回答
685 浏览

silverlight - 基于视图模型属性更新的 Silverlight 行为

我想要一个 Silverlight 行为,该行为由我的页面的视图模型中的属性更改触发。但是,我无法弄清楚如何做到这一点。

所以,我有一个非常简单的视图模型:

此视图模型是具有绑定到文本块的用户控件的数据上下文SomeProperty

这一切都很好。现在我想附加一个由我的视图模型中myTextBlock的更改触发的行为。ChangingProperty行为应该突出显示TextBlock,例如(或更复杂的东西)。

如何指定此触发器?这可能吗?

亲切的问候,

罗纳德

0 投票
2 回答
1033 浏览

wpf - WPF MasterDetail ViewModel 延迟更新到主列表。(防止网格自动更新)

首次尝试在业务线项目上实现 MVVM 模式。我遇到了一些问题,我认为像这样的问题有更简单的答案:

原型窗口是项目列表的基本主从视图。(一个 Person 对象列表)。该视图包含主列表的 Infragistics xamDataGrid。当项目在网格中被选中时,您可以在下面的详细信息面板中编辑详细信息,并且当您在详细信息面板中的字段上按标签时,更新会在网格数据中“实时”显示。唯一的问题是我不想要“presto”,我想要“等到我按下‘应用更改’按钮”。

我希望避免创建一个单独的列表实例,以将主列表与我在详细信息面板中添加/删除/修改的工作组分开。

我走过的路:

我覆盖了网格字段中的 CellValuePresenter 样式,因此我可以将绑定设置为“OneWay”。这会阻止实时更新。

然后我将“ApplyUpdates”命令 (RelayCommand) 添加到我的 PersonListViewModel。这会引发“PERSON _ITEM_UPDATED”消息。我正在使用 MVVM Foundation Messenger 和 RelayCommand 类的 VB 端口。

PersonView 注册 PERSON _ITEM_UPDATED 消息并在收到消息时重新绑定网格。

所以,这行得通,但它闻起来不对。视图中似乎有太多的逻辑,而 ViewModel 并没有规定 UI 的状态,而是视图。

我错过了什么?您将使用什么方法让 ViewModel 延迟将更改发布到视图?

更新:我现在正在为网格创建一个自定义 ViewModel(只读,没有 Propertychanged 通知)和一个用于详细信息区域的可编辑 ViewModel。两个 VM 将包装相同的业务对象,但 ReadOnly 版本不会发布更改。这将使 VM 控制视图何时更新。

0 投票
1 回答
11690 浏览

asp.net-mvc - ASP.NET MVC - 除非模型包装在自定义 ViewModel 中,否则表单返回空模型

我的应用程序中有一对视图,它们都为我的一个模型项显示相同的编辑器模板;在两个视图(“添加”和“编辑”)中,“编辑”工作正常,但是当我的控制器操作处理帖子时,“添加”为模型返回 null。

我发现如果我给“添加”视图一个自定义 ViewModel 并调用Html.EditorFor(p => p.PageContent)而不是简单地调用整个 Model 对象上的 EditorFor() Html.EditorFor(p => p),那么表单会返回正确的非空模型,但这会产生与我的客户端脚本和控件 ID(因为现在所有字段都以“PageContent_”为前缀)。我在整个应用程序的几个不同地方使用了相同的编辑器模板技术,而其他人都没有表现出对 ViewModel 的这种奇怪的依赖。

有没有其他人遇到过类似的问题?

编辑视图

行动(工作)


添加视图

行动(失败)


在你哭“重复”之前

这个问题确实与这个有关,但这个问题旨在针对我遇到的具体问题,而不是那里提出的更一般的问题。

0 投票
2 回答
2796 浏览

silverlight - SilverLight - MVVM 将视图模型属性绑定到数据网格列

在我的 SilverLight 应用程序中,我的 ViewModel 中有一个名为“vmProperty”的属性和一个名为“dgSource”的列表。

我将我的 dgSource 作为 ItemsSource 绑定到数据网格,此时每个数据网格行的数据上下文更改为 dgSource 中的每个项目。其中一列,比如复选框列,需要绑定到 vmProperty。但由于 ViewModel 不再是该行的数据上下文,我无法访问此属性。

我该如何解决这个问题?如果问题不清楚,请告诉我,我将发布示例。提前致谢。

0 投票
5 回答
35820 浏览

wpf - WPF:如何在没有代码隐藏代码的情况下从 ViewModel 向 View 发送事件信号?

我有很简单的(我希望:))问题:

在 MVVM 中,View 通常监听 ViewModel 属性的变化。但是,有时我想监听事件,例如,当 VM 发出信号时,View 可以启动动画或关闭窗口。

通过带有 NotifyPropertyChanged 的​​ bool 属性(并且仅当它从 false 变为 true 时才开始动画)是可能的,但感觉就像一个 hack,我更喜欢公开事件,因为它在语义上是正确的。

另外,我想在代码隐藏中没有代码的情况下这样做,因为这样做viewModel.myEvent += handler意味着我必须手动取消注册事件以允许 View 被 GC'd - WPF 视图已经能够“弱”地监听属性',而且我更喜欢仅在 View 中以声明方式进行编程。

标准的强事件订阅也很糟糕,因为我需要为一个 View 切换多个 ViewModel(因为每次创建 View 都会占用过多的 CPU 时间)。

感谢您的想法(如果有标准解决方案,指向 msdn 的链接就足够了)!

0 投票
2 回答
699 浏览

wpf - 聚合 ViewModel 是个好主意吗?

将 ViewModel 作为另一个 ViewModel 的属性是好主意还是坏主意?

例如:

0 投票
2 回答
1465 浏览

asp.net - asp.net mvc - 设置元标记和页面标题

我有我的 asp.net mvc 项目设置,它使用 BaseViewModel 将强类型视图模型传递给每个视图。基本视图模型包括页面标题和元标记信息等信息。

有没有一种快速简单的方法来使用我的 ViewModel 中的这些信息在我的母版页中设置这些信息?

目前我必须在每个视图中包含如下代码:

除了我目前正在做的方式之外,我想不出一种自动设置此信息的方法,但只是想优化这个重复的 html 代码。

谢谢!保罗