c# - 使用 MVVM 模式在自定义控件或 UserControl 上调用方法的正确方法?

标签 c# silverlight xaml mvvm prism

我在模块化 Silverlight 应用程序中使用 PRISM 和 MVVM。我仍在尝试找出以 MVVM 方式进行交互的正确方法,并且由于不同的原因,PRISM 和示例提供的两种方法不是我喜欢的。

方法一(PRISM):使用不同区域的适配器。基本上,它涉及容器上的附加属性并将 View 注入(inject)区域。这几乎 100% 有效,但这种方法的负面影响是没有很好的方法来传达结果。我可以使用 EventAggregator,但在交互完成时用数据引发事件感觉有些不对劲。

方法2(PRISM):使用InteractionRequest。这涉及到触发操作和一些我必须在每个 View 上重复的大型样板 XAML。

我正在考虑自己创建一些东西,这需要创建我自己的控件,这些控件必须添加到每个 View 中,但只有很少的 XAML 和某种我可以将此控件绑定(bind)到的 IPopupService。我可以通过 PopupService 传递所有需要的数据,但为了真正使 POPUP Action 发生 - 我需要在这个控件上调用方法,这在 MVVM 中分崩离析

我想知道如何在 View 不应该知道 VM 的 MVVM 中调用控制方法?

最佳答案

View 没有选择,但要注意 VM,因为它绑定(bind)到它。

您可以通过运行时实现来定义某种服务,该实现将与 UI 交互,而设计/测试/调试实现则执行其他操作。您还可以在 VM 层中发布一些事件,由 View 层决定如何解释。

关于c# - 使用 MVVM 模式在自定义控件或 UserControl 上调用方法的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8089805/

相关文章:

c# - 对所选容器后面的所有内容应用模糊

c# - 似乎不太清楚这个正则表达式是怎么回事?

c# - Paypal :快速结帐。在单笔交易中设置一次性付款和定期付款

Java 和 Silverlight 永远在一起

c# - 在 Silverlight 中将 windows-1252 编码转换为 UTF-8

c# - 有没有办法将 Controls.ContextMenu 转换为 Forms.ContextMenu?

c# - SpecFlow+ Runner 无法发现测试错误

c# - 确定缓冲区应该有多大

c# - 跟踪账户余额和信息

c# - 使用 StaticResource 作为 MarkupExtension 的参数导致 WPF 中的 NullReferenceException