gpt4 book ai didi

wpf - 在 WPF CAL MVVM 中初始化模型和 View 的正确方法是什么

转载 作者:行者123 更新时间:2023-12-04 18:16:48 24 4
gpt4 key购买 nike

我遇到了两种在 WPF CAL MVVM 中初始化 View 和 View 模型的方法。

1 - 似乎更受欢迎。要求您解析 ViewModel 以自动解析 View。 ViewModel 包含有关 View 的信息。

    public interface IView
{
void SetModel(IViewModel model);
}

public interface IViewModel
{
IView View { get; }
}

public class View
{
public void SetModel(IViewModel model)
{
this.DataContext = model;
}
}

public class ViewModel
{
private IView view;

public ViewModel(IView view)
{
this.view = view;
}

public IView View { return this.view; }
}

2 - 看起来更干净,并从 ViewModel 中删除了 View。要求您解析 View 以自动解析 ViewModel。将对象注入(inject) View (不确定这是否好)。
    public interface IView
{
}

public interface IViewModel
{
}

public class View
{
private IViewModel model;

public View(IUnityContainer unityContainer)
{
this.model = unityContainer.Resolve<IViewModel>();
this.DataContext = this.model;
}
}

public class ViewModel
{
}

初始化 View 和模型的公认方法是什么,每种方法的优缺点是什么。您应该将对象注入(inject)您的 View 吗?

最佳答案

它们都是有效的,但 #1 往往更易于测试(它至少使您的测试更简洁)。 #2的优点是它往往更明确并且使维护更加清晰,尤其是当您有很多营业额时,诸如此类。需要较少的解释(尽管这不是采用它的理由,这只是一个不言而喻)。

区别在于 #1 称为依赖注入(inject) #2 称为服务位置 .他们经常感到困惑,因为他们通常都使用某种 IoC 容器(尽管不一定是这种情况)。

这最终是一个偏好问题,但正如我所说,我认为你会发现#1 更容易测试......你不必在测试/模拟中涉及 IUnityContainer 接口(interface)。

关于wpf - 在 WPF CAL MVVM 中初始化模型和 View 的正确方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2072699/

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