2009-06-02 66 views
0

Hy guys!使用Onyx的MVVM中父/子视图模型关系的最佳实践?

我目前正在通过Onyx框架使用MVVM开发一个小型的WPF项目。

我currentview架构是这样的:

<DockPanel> 
    <Menu DockPanel.Dock="Top" Background="#cecece"> 
     <!-- Menu --> 
    </Menu> 

    <Grid> 
     <views:TranslationView x:Name="translationView" /> 
    </Grid> 
</DockPanel> 

,我现在已经是如何实现两者的ViewModels之间的关系问题。我目前基本上只是有翻译视图有自己的ViewModel没有链接到父视图模型。

问题是我希望能够通过MainView打开某个文件,然后解析这些内容并将它们显示在TranslationView中。有没有推荐的方法来做到这一点?

我想过只是用TranslationViewModel作为MainViewModel一个属性,然后将它作为DataContext的为TranslationView,但它有点似乎对玛瑙的模型,通过类型(而不是对象)引用来定义视图模型运行。

回答

0

Onyx没有“通过类型(而不是对象)引用定义ViewModel的模型”。 ViewModel附加属性可以被分配一个对象引用。事实上,这个属性是一个Object类型,并使用强制将Type实例更改为指定Type的对象实例。这只是一个方便。您可以自由分配以任何您想要的方式创建的对象引用。

像大多数问题一样,有许多方法可以解决您的问题。你提到但解雇你的解决方案,因为你认为它违背了Onyx的设计是可行的,但我会犹豫使用,只是因为它创造了更紧密的耦合。另一种解决方案是利用Event Agregator模式以断开的方式在视图之间进行通信。或者你可以利用更多的面向服务的方法。例如,我通常定义一个IApplication服务,它位于您通常以紧密耦合的设计访问Application.Current的位置。您可以在此服务上提供属性以保存加载文件的内容,并在服务上公开INotifyPropertyChanged以允许TranslationViewModel知道该属性已更改。

相关问题