不确定帖子,但听起来您想将控件中的事件绑定到视图上的方法
在这种情况下:
<SomeControl cal:Message.Attach="[Event SomeEvent] = [Action SomeMethod($eventArgs)]" />
如果反过来,您可以使用事件聚合器(视图可以订阅事件......为什么不呢,它仍然是解耦的......)
虚拟机:
SomeEventAggregator.Publish(new SomeMessageInstanceThatTheViewWillSubscribeTo());
看法:
class SomeView : UserControl, IHandle<SomeMessageInstanceThatTheViewWillSubscribeTo>
// dont forget to...
SomeEventAggregator.Subscribe(this);
或者 - 在视图上实现一个接口
class SomeView : UserControl, IAcceptSomeNotificationMessage
{
public void Notify() { // blah
}
}
虚拟机:
class SomeViewModel : Screen // whatever
{
void SomeMethod()
{
// The VM should be IViewAware so will implement GetView()
var view = GetView();
if(view is IAcceptSomeNotificationMessage)
(view as IAcceptSomeNotificationMessage).Notify();
}
}
选择上述之一 - 我相信还有更多方法。我通常使用事件聚合器——当然这取决于你使用了多少 IoC 以及一切的解耦程度。