【发布时间】:2012-06-28 14:19:55
【问题描述】:
我知道那是糟糕的设计,但我需要从我的视图模型中访问视图。这是因为我有一些旧控件,例如Winforms控件,不支持绑定,需要代码填充。
我正在使用 AvalonDock 2.0 的 MVVM 模型,并且有类似的东西:
<ad:DockingManager x:Name="dockManager"
DocumentsSource="{Binding Files}"
AnchorablesSource="{Binding Tools}"
ActiveContent="{Binding ActiveDocument, Mode=TwoWay, Converter={StaticResource ActiveDocumentConverter}}">
<ad:DockingManager.LayoutItemTemplateSelector>
<local:PanesTemplateSelector>
<local:PanesTemplateSelector.NavigationViewTemplate>
<DataTemplate>
<tvext:TreeViewExtended />
</DataTemplate>
</local:PanesTemplateSelector.NavigationViewTemplate>
</local:PanesTemplateSelector>
</ad:DockingManager.LayoutItemTemplateSelector>
所以模板 NavigationViewTemplate 绑定到集合 Tools 中的一项,这是我的 NavigationViewModel 类型的 ViewModel。
我没有绑定问题,例如一个文本框到我的视图模型的一个属性。但我不知道如何从 NavigationViewModel 访问模板内的 tvext:TreeViewExtended 控件以填充它。
TIA 迈克尔
【问题讨论】:
-
不要害怕在你的代码中添加一些额外的代码来达到这个目的。如果您想与不同的 UI 共享您的视图模型,那么这样做会很困难。您的视图模型服务于 UI,但不应直接依赖特定的 UI 组件。
标签: wpf xaml data-binding mvvm