gpt4 book ai didi

c# - 什么时候可以将 2 个 View 模型合并为 1 个而不是使用某种形式的 View 模型- View 模型通信?

转载 作者:太空狗 更新时间:2023-10-30 01:24:40 24 4
gpt4 key购买 nike

我有 2 个 View 模型,每个 View 模型都有自己的 View 。

第一个 View 模型有 3 个属性被 View 显示:

PolicyProvider

PolicyType

PolicyNumber

第二个 View 模型的 View 仅显示 1 个属性:

TypeOfInvestmentFund

PolicyTypeTypeOfInvestmentFund 之间存在一对多关系。

这两个 View 模型及其 View 都显示为父窗体中的用户控件。

TypeOfInvestmentFund 的可用选项取决于在其他 View 中选择的PolicyType


我觉得这两个 View 模型可以结合起来,因为

a)它们显然有些耦合

b)控件既小又简单,加入它们不会创建复杂且难以管理的对象。

然而,这个数据是相当不相关的;足够不相关以至于用户仍然希望数据在表单的单独部分可见(因此放置在单独的 View 中)。

我个人认为,将这 2 个 View 模型组合在一起并让 2 个单独的 View 连接到它以显示它的不同部分比管理这两个对象之间的通信要少得多。

不过,我可以使用 Prism 事件聚合器创建松散耦合的事件,虽然我从未这样做过,但管理起来可能并不多,并且将这 2 个 View 模型分开将保持关注点分离。此外,如果稍后在开发中出现其他控件也需要此信息,我无法继续吸收它们,因此在此阶段启动事件聚合器将防止返工,因为事件已经可以订阅了。与仅组合 View 模型相比,还有更多工作要做。

这两个中哪个“更正确”?我知道这是一个判断电话,但我不能决定,所以我正在寻找意见来帮助我下定决心。

最佳答案

ViewModel 反射(reflect)的是 View ,而不是数据

如果您的 View 显示一个 Policy 和一个动态的 TypeOfInvestmentFund,那么无论如何您的 ViewModel 都应该有这两个对象。

我个人会让我的 ViewModel 向 View 公开一个 Policy 模型,并让 PolicyModel 包含 Provider 的属性,类型NumberInvestmentFund

然后我可以使用 DataTemplates 告诉 WPF 如何绘制每个对象。这是一个粗略的示例,概述了您将如何执行此操作:

<DataTemplate DataType="{x:Type local:PolicyModel}">
<StackPanel>
<local:PolicyView />
<ContentControl Content="{Binding InvestmentFund}" />
</StackPanel>
</DataTemplate>

<DataTemplate DataType="{x:Type local:InvestmentFundA}">
<local:InvestmentFundA />
</DataTemplate>

<DataTemplate DataType="{x:Type local:InvestmentFundB}">
<local:InvestmentFundB />
</DataTemplate>

编辑

如果 PolicyTypeOfInvestment 是两个独立的对象,我会将它们的 Models 分开,并将它们放在同一个 View 模型Models 用于对数据建模,而 ViewModels 用于对 View

建模

关于c# - 什么时候可以将 2 个 View 模型合并为 1 个而不是使用某种形式的 View 模型- View 模型通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8729035/

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