gpt4 book ai didi

MVVM - View 是否应该引用 Presenter/ViewModel?

转载 作者:行者123 更新时间:2023-12-03 10:52:39 26 4
gpt4 key购买 nike

我一直在查看 PRISM 2 示例,以了解如何最好地处理我正在开发的新应用程序,这将是一个 PRISM 2/WPF 应用程序。特别看一下 PRISM 附带的 View Injection 示例应用程序,我注意到所有 View 都实现了一个接口(interface),该接口(interface)允许演示者(或 ViewModel)与 View 交互。

在过去,我以相反的方式做到了这一点,我将演示者注入(inject)到 View 中,以便 View 可以直接调用演示者上的方法,有点像这样:

    public partial class SomeView : ModuleBase
{

private ISomePresenter _somePresenter;

public SomeView (ISomePresenter somePresenter):this()
{
// Give the view a reference to the presenter
_somePresenter = somePresenter;
// Bind the View to the presenter
DataContext = _somePresenter;
}

private void btnSubmit_Click(object sender, RoutedEventArgs e)
{
// The view can call actions directly on the presenter (OK I should probably use a command for this)
_somePresenter.SomeAction();
}
}

上面的技术对我来说似乎足够合理,但是看着样本我开始质疑这种方法。有没有人对解决这个问题的最佳方式有看法(没有双关语)?
  • 将演示者添加到 View 中并让 View 与演示者交互
  • 将 View 添加到演示者并让演示者与 View 交互
  • 我还没有想到的完全不同的东西?
  • 最佳答案

    在 MVVM 中将 ViewModel 映射到 View 的最常见方法是使用 DataTemplate :

    <DataTemplate DataType="{x:Type vm:SomeViewModel}">
    <v:SomeView />
    </DataTemplate>

    当您在 ContentControl 或 ItemsControl 中显示 ViewModel 实例时,WPF 将自动为 ViewModel 实例化适当的 View,并设置 View 的 DataContext到 ViewModel 实例。

    这样,您在 ViewModel 中没有对 View 的任何引用,并且 View 仅通过 DataContext 引用 ViewModel属性(property)。如果您确实需要在 View 的代码隐藏中访问 ViewModel,您可以随时转换 DataContext (但这意味着 View 知道 ViewModel 的实际类型,这会导致耦合)

    关于MVVM - View 是否应该引用 Presenter/ViewModel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1431758/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com