我知道這是糟糕的設計,但我需要從我的viewmodel訪問視圖。這是因爲我有一些舊的控件,例如Winforms控件,不支持綁定,需要用代碼填充。從Viewmodel訪問視圖
我使用的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勢必收集工具的一個項目,這是我喜歡的類型NavigationViewModel的視圖模型。
我沒有問題綁定例如一個TextBox到我的viewmodel的屬性。但我不知道如何從我的NavigationViewModel訪問模板中的tvext:TreeViewExtended控件以填充它。
TIA Michael
不要害怕在你的代碼中加入一些額外的代碼來達到這個目的。如果你想分享你的視圖模型與不同的用戶界面,這樣做會很難做到這一點。您的視圖模型爲UI提供服務,但不應直接依賴特定的UI組件。 –