gpt4 book ai didi

c# - MVVM 中模型之间的依赖关系

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

除其他外,我还有 2 个模型,WorkDay 和 Filter。 WorkDay 包含工作单元。将单个工作日中每个工作单元的持续时间相加后,您将获得工作日持续时间。此外,工作单元具有分配标签以创建工作特定报告。为了过滤标签,我有一个名为 filter 的模型,其中包含要过滤的标签列表。

现在我的问题是,我需要结合这两个模型。但据我了解 MVVM,只有 ViewModel 相互交互。模型不知道其他模型。

工作日(大大缩短):

public class WorkDay
{
public List<WorkUnit> WorkUnits { get; set; }

public TimeSpan Duration
{
get
{
var duration = TimeSpan.Zero;
foreach (var workUnit in WorkUnits)
{
duration += workUnit.Duration;
}
return duration;
}
}
}

过滤器(大大缩短):
public class Filter
{
public List<String> Tags { get; set; }
}

为了将过滤器应用于持续时间,我需要将过滤器注入(inject) WorkDay 的 Duration 属性,从而启用两个模型之间的连接。
public class WorkDay
{
public List<WorkUnit> WorkUnits { get; set; }

public TimeSpan Duration
{
get
{
var duration = TimeSpan.Zero;
foreach (var workUnit in WorkUnits)
{
var filter = ...; // get filter from somewhere?
if (workUnit.hasAtLeastOneTagFrom(filter))
duration += workUnit.Duration;
}
return duration;
}
}
}

筛选器不应是 WorkDay 中的属性/字段,因为筛选器是可选应用的,并且可以再次删除。 IE。它仅用于在 UI 中计算和显示报告。所以实际数据没有改变。此外,UI 绑定(bind)到 Duration 属性,因此无法通过以下方式引入方法。
public TimeSpan GetDuration(Filter filter) { ... }

我怎样才能在 MVVM (MVVMLight) 中实现这一点,或者我只是在这里遗漏了一些明显的东西?

最佳答案

在 MVVM 中,模型肯定可以知道其他模型。实际上,您已经在代码中这样做了:WorkDay有一个 WorkUnits属性(property)。

可以将另一个模型传递给您的模型。您可以创建一个方法来设置 Duration字段,它又绑定(bind)到 View 。

关于c# - MVVM 中模型之间的依赖关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28936704/

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