gpt4 book ai didi

wpf - 使用 WPF、MVVM 和 Prism 构建应用程序

转载 作者:行者123 更新时间:2023-12-04 22:24:02 26 4
gpt4 key购买 nike

我们在我们的团队中,研究将 WPF 与 Prism 结合使用的可能性。

我们当前的解决方案是使用 Windows 窗体构建的,因此在令人满意地实现此架构迁移的目标之前,必须考虑和研究很多因素。

MVVM 模式是与这些因素相关的新特性中的技术之一。这种模式使用了我们团队目前所知道的完全不同的概念。

我们正在阅读和学习很多关于它的内容,但我们无法确定它的使用(纯粹)是否真的能达到我们的目的:我们将创建一个应用程序,该应用程序将拥有大量使用 CRUD 的窗口(创建、读取、更新和删除)模型。例如:客户注册、产品注册等。
我们认为使用这种模式会导致 Models 定义期间的返工,必须在 ViewModels 定义期间重写。

我想知道是否有人有任何经验报告或提示可以指导我们使用这些技术。

最佳答案

如果您正在使用 WPF,请务必使用 MVVM 设计模式。它让生活变得更简单, future 的维护也很容易。

关于你的评论

We think the use of this pattern can cause rework during the Models definitions, which must be rewritten during the ViewModels definitions.



在 MVVM 中有两种处理模型/ View 模型的方法。 “MVVM-purist”方法是从 ViewModel 公开模型的属性,在这种情况下,是的,您将复制一些代码。更实用的方法是从 ViewModel 公开整个 Model。两种方式都可以接受,但我建议使用第二种方式,除非您有一个非常大的项目,其中有单独的人员/团队在 Model 和 ViewModel 层上工作。

MVVM 纯粹主义者:
public class CustomerViewModel
{
private Customer _customer;

public string Name
{
get
{
return _customer.Name;
}
set
{
if (value != _customer.Name)
{
_customer.Name = value;
RaisePropertyChanged("Name");
}
}
}
}

<TextBlock Text="{Binding Name}" />

更实用的方法:
public class CustomerViewModel
{
private Customer _customer;

public Customer Customer
{
get
{
return _customer;
}
set
{
if (value != _customer)
{
_customer= value;
RaisePropertyChanged("Customer");
}
}
}
}

<TextBlock Text="{Binding Customer.Name}" />

关于 Prism,我认为它是一个很棒的库。我更喜欢他们的 NotificationObjectEventAggregator ,并且喜欢 DelegateCommand 一旦我习惯了当 CanExecuteChanged 参数更改时它不会自动提高它的 CanExecute 的事实。

我唯一不喜欢 Prism 的是他们的 RegionManager 。我觉得它让 View 过多地控制了应用程序流程,而不是 ViewModels。我还看到它经常被误用于导航,而且经常会变成一团糟。我仍然使用它来定义我的应用程序布局(例如, MenuRegionNavigationRegionContentRegion ),但除此之外,我使用我的 ViewModel 来满足所有导航需求。

所以最终,我会说去吧!我喜欢使用 WPF,而且我觉得您不应该在没有 MVVM 设计模式的情况下使用 WPF。 Prism 也是一个很棒的库,可以提供一些我认为在每个 MVVM 应用程序中都需要的缺失功能。

关于wpf - 使用 WPF、MVVM 和 Prism 构建应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8873905/

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