0

我正在开发一个带有文件查看器的 silverlight 项目。此文件查看器没有 Source 属性或其他接受流的属性。它确实有一个 LoadDocument(Stream file) 方法。由于文件将被异步加载,我需要“通知”视图缓冲区可用,然后让视图调用 LoadDocument 方法。

在 MVVMLight 中,我可以使用“Messenger”功能来做到这一点。我看到了 EventAggregator,但我看到的一切都让通信走向了另一个方向。我觉得这应该很容易做到,但我只是不明白。

Views 构造函数中是否可以将方法绑定到 ViewModel 的属性?这似乎与在 xaml 中完成的功能相同,我只想在后面的代码中完成。

谢谢

dbl

4

1 回答 1

0

不确定帖子,但听起来您想将控件中的事件绑定到视图上的方法

在这种情况下:

<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 以及一切的解耦程度。

于 2012-11-29T22:09:43.547 回答