问题标签 [mvvm]

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 投票
3 回答
21985 浏览

wpf - TextBox.TextChanged & ICommandSource

我正在为我的 WPF UI 遵循MV-VM模式。我想将文本框的 TextChanged 事件的命令连接到我的 ViewModel 类中的命令。我能想到的完成此任务的唯一方法是从 TextBox 控件继承,并实现 ICommandSource。然后我可以指示从 TextChanged 事件中触发该命令。对于看起来如此简单的事情来说,这似乎是太多的工作。

有没有更简单的方法(比继承 TextBox 并实现 ICommandSource)将 TextChanged 事件连接到我的 ViewModel 类?

0 投票
8 回答
2773 浏览

wpf - 您在哪里划清代码和 XAMLin WPF 之间的界限?

我对 WPF 和 XAML 了解得越多,我就越意识到您可以在 XAML 或代码(例如 C# 代码或 VB.Net 代码)中完成几乎所有的 GUI 初始化和事件处理粘合。

我的问题是那些在 WPF 上工作了更长时间的人,最好是那些已经使用它发布应用程序的人——你在哪里找到了在 XAML 和代码之间“划清界限”的最佳位置?您是否尽可能使用 XAML?仅在哪里与非编码 UI 设计师交互?

这方面的任何提示都会对我自己和其他刚刚进入 WPF 编程并且对我们可以做出的所有选择感到瘫痪的程序员非常有帮助!

0 投票
7 回答
13048 浏览

c# - Selecting a node in virtualized TreeView with WPF

Is there a way to select manually a node in virtualizing TreeView and then bring it into view?

The data model I'm using with my TreeView is implemented based on the VM-M-V model. Each TreeViewItem's IsSelected property is binded to a corresponing property in ViewModel. I've also created a listener for TreeView's ItemSelected event where I call BringIntoView() for the selected TreeViewItem.

The problem with this approach seems to be that the ItemSelected event won't be raised until the actual TreeViewItem is created. So with the virtualization enabled node selection won't do anything until the TreeView is scrolled enough and then it jumps "magically" to the selected node when the event is finally raised.

I'd really like to use virtualization because I have thousands of nodes in my tree and I've already seen quite impressive performance improvements when the virtualization has been enabled.

0 投票
1 回答
2516 浏览

.net - 不使用 Prism 的 WPF 中的松散耦合事件

我正在开发一个 WPF 应用程序,并且正在使用 Model-View-ViewModel 模式。

该应用程序目前由两个模块组成:

  • 左面板浏览树并选择一个节点
  • 主面板显示所选树节点的内容。

我想将这两个模块分开,但是当我在左侧面板中选择一个节点时,我需要触发一个主面板可以订阅的事件。我不想耦合左面板和主面板,所以我不想共享 ViewModel 类的实例。

理想情况下,我很想使用 Prism(WPF 复合应用程序指南),但我目前正在扩展现有应用程序,无法引入更多依赖项。该项目也在 .NET 3.0(不是 3.5)上,所以我必须将 Prism 转换回 .NET 3.0,因为它是为 .NET 3.5 编写的。

在 Prism 中,我会使用松耦合事件基础设施来解决这个问题。它允许您在任何层中的任何类中触发事件,并在任何层中的任何类中侦听任何事件。基本上,事件的发布者和订阅者是分离的。

我使用命令来实现我的视图和我的视图模型之间的这种松散耦合,但我不确定如何进行正确的跨视图通信。

非常感谢任何提示或建议。

我正在专门为 .NET 2.0/3.0(没有 LINQ 的东西)寻找一个真正轻量级的 pub/sub 事件模型,或者在不耦合两个模块的情况下实现跨视图(模块)通信的其他东西。

更新:我最终以与 Glen 建议的方式类似的方式解决了这个问题。我有一个单独的 EventService(我称之为 CommandProxy),并通过我的服务定位器中的构造函数将它传递给每个 ViewModel(目前我使用的是服务定位器而不是 IoC 容器)。CommandProxy 公开了一组 MultiDelegateCommants,它是 Prism(复合 WPF 指导)中 DelegateCommand 的扩展。它基本上允许从可视树中分离出来的命令,并且支持多个订阅者。

0 投票
5 回答
1664 浏览

wpf - 我应该将业务对象与 WPF 中的 UI 分开吗?

WPF 的面向视图模型的处理方式使得仅在 UI 中使用业务对象非常诱人。你见过这方面的问题吗?为什么或为什么不这样做?

0 投票
1 回答
910 浏览

wpf - XDocument 之上的 ViewModel

我正在开发一个 WPF 应用程序,它有一个表示 XML 的树视图。我将 XML 加载到 XDocument,然后将 TreeView 绑定到该对象。

现在使用MVVM 模式,我想在XDocument之上提供一个ViewModel。我应该在 ViewModel 类中实现哪些内容。

我在想,

  1. RoutedCommands 绑定到 TreeView 上的 ContextMenu 命令以允许添加节点、删除节点、修改节点等
  2. 实际修改视图上的属性和节点名的逻辑。

我是否朝着正确的方向前进?我还应该做些什么来使它更简洁、模块化,同时易于理解。

我应该使用 RoutedCommands 还是实现 ICommand 接口并创建我的命令?使用 CommandBindings 的附加属性怎么样?在我正在谈论的树视图应用程序中这样做有意义吗?我有点不知所措,因为有很多选项可以实现这一点。

有没有人有链接,做这种事情的示例代码?一个参考实现可能是?

0 投票
3 回答
11568 浏览

wpf - 在 WPF 中使用数据绑定启动动画

我正在尝试调整一个简单的 WPF 应用程序以使用 Model-View-ViewModel 模式。在我的页面上,我有几个动画:

目前我在后面的代码中开始动画,并且可以在完成时监听 Co​​mpleted 事件以执行以下代码:

有没有办法将故事板数据绑定到我的 ViewModel,以便它从 ViewModel 引发的事件开始,并在完成时回调到该 ViewModel?

0 投票
14 回答
76748 浏览

wpf - ViewModel 中的 INotifyPropertyChanged 与 DependencyProperty

在 Model-View-ViewModel 架构 WPF 应用程序中实现 ViewModel 时,似乎有两个主要选择如何使其可数据绑定。我已经看到了使用DependencyPropertyView 将要绑定的属性的实现,并且我看到了 ViewModel 的实现INotifyPropertyChanged

我的问题是我什么时候应该更喜欢其中一个?有性能差异吗?将 ViewModel 依赖项提供给 WPF 真的是一个好主意吗?在做出设计决定时我还需要考虑什么?

0 投票
1 回答
1097 浏览

language-agnostic - 任务或对话框的 Presentation-/ViewModel 是什么样的?

我正在尝试迁移到模型/视图模型/视图架构,并在尝试将选择对话框推送到此模式时卡住了。我想将检索选择列表(业务/演示逻辑)和实际显示/选择机制(视图)分开,以便在不同的视图中重用前者(例如 ComboBox 与模态对话框)。

这种选择任务的 ViewModel 会是什么样子?还是我在努力,我应该只在视图中实现这个?

0 投票
5 回答
7426 浏览

c# - MV-VM 设计问题。从 ViewModel 调用 View

我刚刚开始研究用于 WPF 应用程序的 MV-VM。到目前为止,除了这个特定问题之外,一切都有意义......

我有一个 ViewModel,我会调用 Search。此 ViewModel 绑定到数据网格并列出项目的结果。现在,我有一个命令需要调出另一个视图,即项目的详细信息。

将逻辑放在搜索视图中显示另一个视图似乎不正确,它根本不可测试。

这是我的 ViewModel 实现,它是不可测试的......

在这种模式中,从 ViewModel 方法显示视图的逻辑在哪里?