Hy guys!
我目前正在通过Onyx框架使用MVVM开发一个小型WPF项目。
我的currentview架构是这样的:
<DockPanel>
<Menu DockPanel.Dock="Top" Background="#cecece">
<!-- Menu -->
</Menu>
<Grid>
<views:TranslationView x:Name="translationView" />
</Grid>
</DockPanel>
我现在的问题是如何实现两个视图模型之间的关系。我目前基本上只是让TranslationView拥有自己的ViewModel,没有链接到父ViewModel。
问题是我希望能够通过MainView打开一些文件,然后解析内容并在TranslationView中显示它们。有推荐的方法吗?
我考虑过只使用TranslationViewModel作为MainViewModel中的属性,然后将其用作TranslationView的DataContext,但它似乎针对Onyx的模型运行,以通过类型(非对象)引用定义ViewModel。
答案 0 :(得分:0)
Onyx没有“通过类型(非对象)引用来定义ViewModel的模型”。可以为ViewModel附加属性分配对象引用。实际上,此属性是Object类型,并使用强制将Type实例更改为指定Type的对象实例。这只是一种便利。您可以自由地分配以任何方式创建的对象引用。
与大多数问题一样,有很多方法可以解决您的问题。您提到但解雇的解决方案,因为您认为它违背了Onyx的设计是可行的,但我会犹豫使用,因为它会产生更紧密的耦合。另一种解决方案是利用Event Agregator模式以断开连接的方式在视图之间进行通信。或者您可以使用更加面向服务的方法。例如,我通常定义一个IApplication服务,它位于您通常以紧密耦合设计访问Application.Current的位置。您可以在此服务上提供一个属性来保存已加载文件的内容,并在服务上公开INotifyPropertyChanged以允许TranslationViewModel知道该属性已更改。