gpt4 book ai didi

c# - 在哪里将实体/模型转换为 MVVM 中的 View 模型?

转载 作者:行者123 更新时间:2023-11-30 16:52:34 25 4
gpt4 key购买 nike

在 MVC 中它非常简单:

客户端发出请求, Controller 要求商务逻辑做一些花哨的事情,商务逻辑要求存储库返回一些数据,然后存储库返回数据,商务逻辑负责将数据从实体转换为 View 模型,然后返回给客户端.

在 MVVM 中,我几乎迷路了,因为 View 模型本身负责向业务逻辑发出请求,所以没有像 Controller 这样的“中间层”。我可以在商业逻辑项目中实现映射器,但由于 View 模型负责向商业逻辑询问数据,它会创建循环引用。

那么我必须在哪里让这个“魔法”发生呢?

最佳答案

我将尝试通过一个简单的示例提供一些背景信息。

请注意,下面的所有代码都只是概念性的,并且是在这里编写的,而不是在 VS 中编写的。

将您的 ViewModel 视为模型的包装器。您的模型由属性公开,因此您可以从 View 绑定(bind)到它或绑定(bind)到它的属性。

你的 View 模型:

  public class SomeEntityViewModel : NotificationObject
{
private SomeEntity _someEntity;
public SomeEntity SomeEntity
{
get{ return _someEntity;}
set
{
_someEntity = value;
RaisePropertyChanged("SomeEntity");
}
}
}

现在假设您向服务器发送请求并等待响应。

我们还假设您有一个更高级别的对象(如父 ViewModel)来启动您的 VM:

  public class SomeEntityContainerViewModel : NotificationObject
{
public ObservableCollection<SomeEntityViewModel> Items;

public void async OnRequestNewEntity()
{
SomeEntity newEntity = await _someEntityService.CreateSomeEntityAsync();
var vm = new SomeEntityViewModel{ SomeEntity = newEntity};
Items.add(vm);
}
}

您的 SomeEntityContainerView 其中 SomeEntityContainerViewModel 是 DataContext :

  <UserControl>
<Button Command="{Binding RequestNewEntityCommand}" />
<ItemsControl ItemsSource="{Binding Items}" />
</UserControl>

您的 SomeEntityView 其中 SomeEntityViewModel 是 DataContext :

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

最简单的设计:

您的模型需要“哑巴”,只有数据。您的 ViewModel 最接近于 Controller,它将处理逻辑,并且它是将包装(不转换)您的模型到 View 模型中的组件。

在上面的例子中,我们有一些更高的对象,一个父 ViewModel,它启动了我们的 ViewModel。

这相当于一个 Controller 的作用域,在 DOM 中它下面有其他嵌套的 Controller 。

关于c# - 在哪里将实体/模型转换为 MVVM 中的 View 模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32422630/

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