使用MVVM模式在自定义Control或UserControl上调用方法的正确方法?

时间:2011-11-11 04:46:46

标签: c# silverlight xaml mvvm prism

我在模块化Silverlight应用程序中使用PRISM和MVVM。我仍然试图找出以MVVM方式进行交互的正确方式,而PRISM和样本提供的两种方法并不是我喜欢的原因。

方法1(PRISM):使用不同的区域适配器。基本上,它涉及容器上的附加属性和将视图注入区域。这几乎是100%的工作,但这种方法的不利之处在于没有好的方法来回传结果。我可以使用EventAggregator,但是当交互完成时,有些事情不适合用数据引发事件。

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

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

我想知道如何在MVVM中调用控制方法,其中视图不应该知道VM?

2 个答案:

答案 0 :(得分:1)

View没有选择,但要注意VM,因为它会绑定它。

您可以使用与UI和设计/测试/调试实现交互的运行时实现来定义某种服务。您还可以在VM层中发布View层将决定如何解释的一些事件。

答案 1 :(得分:0)

首先,如果你正在开发一个将被其他人使用的UserControl,我认为MVVM不是一个好的选择。一个无形的控制是你真正应该开发的。 Jeremiah Morrill有一篇关于这个主题的博客文章。

如上所述,如果您有默认的公共构造函数,可以使用XAML设置datacontext。

内部ControlView.xaml put:

<UserControl.DataContext>
    <local:ControlViewModel />
</UserControl.DataContext>