【问题标题】:MVVM with Implicit DataTemplates - getting the View explicitly带有隐式数据模板的 MVVM - 显式获取视图
【发布时间】:2011-06-06 17:22:22
【问题描述】:

我正在使用 Silverlight 5 的隐式 DataTemplates 来连接 ViewModel 和 View。

在我的 MainView 中有一个 TabControl(来自 Telerik),它绑定到 MainViewModel 的 ObservableCollection。对于该集合中所有可能的 ViewModel 类型,有一个 DataTemplate 定义了相应的视图 (=Tab)。

非常干净且完全解耦。

但现在我需要编写真正只与视图相关的代码:我想手动将所选选项卡的功能区合并到主视图的功能区。 ViewModel 对其对应的视图一无所知,也不知道像功能区这样的 UI 元素(这是一件好事)。所以这是我需要编写代码隐藏的极少数情况之一。

我尝试了 TabControl 的 SelectionChanged 事件,但所有属性(SelectedItem、SelectedValue、...)都指向 ViewModel 而不是 View。

如何获得视图 - Silverlight 5 使用 DataTemplate 连接的视图??

感谢您的任何想法!

【问题讨论】:

    标签: mvvm mvvm-light silverlight-5.0


    【解决方案1】:

    简短的回答,你不知道。使用具有强类型约束的事件聚合器或信使类。

    使用 MVVM-Light 的一个很好的实现是 Messenger 类,有关信息,请参阅这篇文章。

    http://blog.galasoft.ch/archive/2009/09/27/mvvm-light-toolkit-messenger-v2-beta.aspx

    无论如何,如果我理解你的话,你应该能够通过信使功能区向选项卡发送消息。

    【讨论】:

    • 发送包含待(未)合并功能区的消息可能会起作用,我猜。据推测,选项卡的“加载”和“卸载”事件将是触发消息的正确位置。但是我仍然想知道是否有一种方法可以在通过隐式 DataTemplate 从 Silverlight 连接视图时获取视图...
    • 使用信使确实解决了我的问题。因此,即使我的原始问题(“通过隐式 DataTemplate 连接时引用视图”)仍然打开,我也接受了您的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-27
    • 1970-01-01
    相关资源
    最近更新 更多