问题标签 [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 投票
4 回答
17061 浏览

c# - 在 WPF UserControl 中附加 ICommand

我实现了一个带有图像的简单按钮:

如您所见,我公开了一个 ButtonCommand 属性,以便能够将 ICommand 附加到此 UserControl:

然后,当我声明我的按钮时,它会给出:

<uc:ImageButton Grid.Row="1" Grid.Column="0" ButtonCommand="{Binding AttachContextCommand}" ButtonImage="{StaticResource AssociateImage}" ButtonText="Associer"/>

还有 badaboom,当我点击我的 ImageButton 时,什么都不会发生。当我用一个简单的按钮替换 ImageButton 时,会调用 ICommand。

我什至尝试简单地扩展 Button 类并绑定一个 ICommand,但再一次,它没有工作......

帮助表示赞赏!

谢谢。

0 投票
5 回答
969 浏览

wpf - ViewModel 如何知道服务中的数据何时更新?

在我的应用程序中,我有几个 ViewModel 有一个服务(存储库、DAO 等),我们称它为WidgetService 并注入它们。

假设这些 ViewModel 之一是所有用户小部件的列表。另一个可能是用于编辑/创建其中一个小部件的 ViewModel。

用户可以在WidgetListViewModel支持的WidgetListView中查看小部件列表,然后单击按钮添加新小部件。为了创建这个新的 Widget,创建一个CreateWidgetViewModel并注入到一些 UserControl/Window 的 DataContext 中,因此,通过 DataTemplates 在 CreateWidgetView 中显示CreateWidgetViewModel魔力。此外,CreateWidgetViewModel的更新不一定发生在WidgetListViewModel的范围内。

WidgetListViewModel被注入 WidgetService 的实例CreateWidgetViewModel被注入了同一个WidgetService实例。

现在,当用户在CreateWidgetView中单击保存时,将调用WidgetService上的Save方法,并且小部件将被持久化。现在需要通知WidgetListViewModel有一个新的 Widget 要显示!

长时间的积累导致了这个问题:我如何让WidgetListViewModel知道它需要显示新的 Widget?

我看过一个视频,其中一个来自 Microsoft 的人使用 ViewModel 订阅的服务上的事件来做这种事情。然而,这样做的缺点是,如果服务比视图模型寿命更长,那么视图模型将不会被 GC 处理,直到服务被 GC 处理。我可以将 IDisposable 添加到 ViewModel。但是,当 ViewModel 仅通过 DataTemplates 在 UI 中表示时,何时/如何调用 Dispose?

有人对此有什么建议吗?

为了澄清,我想说我对 MVVM 的解释最接近 Josh Smith 的解释。至少在我的 MVVM 架构上与 Crack.Net 源代码中的架构非常接近。

0 投票
4 回答
52791 浏览

mvvm - MVVM 路由和中继命令

RoutedCommandRelayCommand 有什么区别?在 MVVM 模式中何时使用 RoutedCommand 以及何时使用 RelayCommand?

0 投票
3 回答
1462 浏览

apache-flex - MVVM - 什么应该包含什么......什么应该创造什么

我有一个正确的巴尼,让我了解如何使用 MVVM 模式将所有东西组合在一起。在实践中这一切似乎都很简单,但试图实现它我似乎打破了我尝试编码的各种其他规则。

顺便说一句,我正在尝试使用 Flex 来实现该模式,而不是 Silverlight 或 WPF,所以如果有人能提出不应该这样做的充分理由,那么我想听听他们的意见。

我有一个问题,我有几个观点。有时我必须同时在页面上显示两个视图;有时我会切换回单个视图。在我正常的 Flex 大脑中,我会有一个带有代码隐藏的主视图,其中包含我所有的其他视图(同样带有代码隐藏)。然后,该主视图将切换其他单独的视图。

当我尝试在 MVVM 中实现这一点时,我试图通过使用将 myViewsViewModels. 假设我创建了一个ViewModel应用程序范围的状态,并ApplicationView绑定到该数据并执行子视图的所有切换。

现在,我应该在哪里为我的子视图创建视图模型?我在里面试过ApplicationView——这似乎不对。然后我尝试在应用程序视图之外并将它的实例传递给ApplicationView然后我的子模型绑定到它。我错过了什么吗?这些方法似乎都不适合试图将其解耦的全部要点。

任何解释这个问题的好书或链接将不胜感激。

干杯,詹姆斯

0 投票
3 回答
5554 浏览

silverlight - Prism 2 SL:单击按钮时从区域中删除视图

我是 Prism 的新手,我正在尝试确定在 Prism 2 应用程序中停用视图的最佳实践——当用户单击视图上的按钮时,我想停用视图。单击按钮时视图正在执行命令。

视图模型正在接收命令,但视图模型没有对 regionmanager 的引用。

视图模型应该知道区域管理器吗?即使视图模型有对它的引用,它也需要将视图实例传递给包含区域的 deactive 方法。

我正在为应用程序使用 MVVM 模式。

0 投票
7 回答
2741 浏览

wpf - Best place to bring up new window in Model View ViewModel

I have an MVVM application. In one of the ViewModels is the 'FindFilesCommand' which populates an ObservableCollection. I then implement a 'RemoveFilesCommand' in the same ViewModel. This command then brings up a window to get some more user input.

Where/what is the best way to do this whilst keeping with the MVVM paradigm? Somehow doing:

in the ViewModel seems wrong.

Cheers,

Steve

0 投票
4 回答
1984 浏览

wpf - 如何进一步将这个 WPF 示例与 MVC、MVP 或 MVVM 解耦?

我通过以下方式解耦了此 WPF 应用程序中的事件。

继续解耦的最佳方式是什么?

Shell.xaml:

引导程序.cs:

Shell.xaml.cs:

客户.cs:

上面的代码成功地将视图Shell与模型分离,Customer:IPerson以便我可以交换模型Employee:IPerson等,它以自己的方式处理“已处理”。那是第一个目标。

但现在:

  • 如何将Processed方法与专门与 Button 对话分离,以便它也可以与在视图中触发事件的 MenuItem 或 ListView 对话,这样它甚至不必是调用它的元素,例如单元测试类?
  • 除了发送者(按钮)之外,我如何更改视图的其他元素,例如,我将如何更改 Shell 中的状态栏?我看到两种方法:
    • 我可以构建一个包含所有视图的容器,并在创建时将容器注入到客户中,然后客户可以查看容器并根据需要操作调用视图(尽管我必须以某种方式匹配发送事件的视图和容器中的视图相同)
    • 我可以在触发事件时以某种方式将整个视图(Window 对象)发送到带有 eventargs的模型,尽管模型需要某种方式来了解(通过接口)在运行时可以操作哪些类型的区域
  • 您将如何继续这个应用程序朝着更加解耦的设计方向发展?
  • 实际上是什么模式,例如 MVC、MVP、MVVM?我只看到一个视图(Shell)和一个模型(客户)。
    • 演示者如何适应?
    • ViewModel 如何适应?
    • 控制器如何适应?
0 投票
6 回答
21939 浏览

wpf - WPF 上下文菜单未绑定到正确的数据绑定项

在标签页上的用户控件的上下文菜单中绑定命令时遇到问题。我第一次使用菜单(右键单击选项卡)时效果很好,但是如果我切换选项卡,该命令将使用第一次使用的数据绑定实例。

如果我在用户控件中放置一个绑定到命令的按钮,它会按预期工作......

有人可以告诉我我做错了什么吗?

这是一个暴露问题的测试项目:

应用程序.xaml.cs:

Window1.xaml:

用户控件1.xaml:

CompanyViewModel.cs:

PersonViewModel.cs:

测试命令.cs:

个人.cs:

0 投票
18 回答
115952 浏览

wpf - WPF MVVM ComboBox SelectedItem 或 SelectedValue 不起作用

更新

经过一番调查。问题似乎是 SelectedValue/SelectedItem 在项目源完成加载之前发生。如果我坐在断点处等待几秒钟,它会按预期工作。不知道我将如何解决这个问题。

结束更新

我有一个在 WPF 中使用 MVVM 和 ComboBox 的应用程序。下面是 ViewModel 示例。我遇到的问题是,当我们离开页面并迁移回 ComboBox 时,没有选择当前选中的值。

查看模型

为了这个例子,假设 MyObject 有两个属性(Text 和 Id)。我的 ComboBox 的 XAML 看起来像这样。

XAML

当我回到页面并重新组装对象时,无论我以哪种方式配置它,ComboBox 都不会选择该值。该对象通过属性中的 get 返回正确的对象。

我不确定这是否只是 ComboBox 和 MVVM 模式工作方式的问题。我们正在做的文本框绑定工作正常。

0 投票
5 回答
6367 浏览

silverlight - 如何在 Silverlight 3 中将 .NET RIA 服务与 MVVM 相结合?

.NET RIA 服务被描述为 Silverlight 的 n 层框架。我一直想知道这个框架和 Model-View-ViewModel 模式之间的关系是什么。它们是否存在冲突,或者你能看到协同组合的潜力吗?