0

嘿伙计们!

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

我当前的视图架构是这样的:

<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。

4

1 回答 1

0

Onyx 没有“通过类型(而非对象)引用定义 ViewModel 的模型”。可以为 ViewModel 附加属性分配对象引用。实际上,这个属性是一个Object类型,通过强制转换将一个Type实例变为指定Type的对象实例。这只是一种方便。您可以随意分配以您想要的任何方式创建的对象引用。

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

于 2010-06-15T17:44:34.027 回答