gpt4 book ai didi

c# - 在C#中的ViewModel中公开模型中的枚举

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

我有一个Xamarin项目,该项目由要在其上发布该应用程序的每个平台的一个Models项目,一个ViewModels项目和一个“View”项目组成。 “模型”项目链接到“ View 模型”项目,但未(直接)由“ View ”项目使用。

问题是我在Models项目中有两个要在Views中使用的枚举,而没有将Views项目链接到Model。有什么方法可以将这些枚举类型公开给View?

我现在正在做的是复制/粘贴,然后将Model枚举类型转换为ViewModel中的相同枚举,但是如果向模型中添加了新的枚举而不是ViewModel,这会让人觉得有些破绽,并且可能会破坏某些东西。除了创建一个新的常量/枚举项目(我们将所有其他链接到该项目)之外,还有更好的解决方案吗?

我想做的是:

//MODEL Project
enum MyEnum{
enum1,
enum2
}
class ModelObject{
MyEnum status;
}

//VIEWMODEL Project
class VMObject{
MyEnum status = modelObject.status;
}

//VIEW Project
if(vmObject.status == MyEnum.enum1){
//...
}

我目前正在做什么:
//MODEL Project
enum MyEnum{
enum1,
enum2
}
class ModelObject{
MyEnum status;
}

//VIEWMODEL Project
enum MyVMEnum{
enum1,
enum2
}
class VMObject{
MyVMEnum status = (MyVMEnum)modelObject.status;
}
//VIEW Project
if(vmObject.status == MyVMEnum.enum1){
//...
}

最佳答案

好吧,这应该属于ViewModel的责任。 ViewModel的全部重点是将模型域转换为 View 域能够消化的内容。如果这意味着要创建一个新的枚举,那就这样吧。这就是automapper的帮助。

附带说明。我发现从 View 域外部使用枚举无论如何都会有点不好,因为它将逻辑带入了 View 。我个人不会将 View 暴露给(直接)有关枚举类型的任何知识。如果由于特定的枚举值需要改变 View 的行为,那么我在ViewModel中具有该逻辑。

更新:

View的目标应该是删除所有业务逻辑。因此,在您的情况下,您说的是希望 View 根据某种模型状态更改其图标。您似乎面临的问题是您不希望 View 直接访问模型枚举类型。所以不要,然后扭转您的想法。有一个使用自己的枚举的View:

enum ViewIcons
{
IconOne,
IconTwo,
}

...可以从您的 ViewModel中设置
view.Icon = ViewIcons.IconOne

因此,假设您在ViewModel中进行了更新
void Update()
{
switch(_model.State)
{
case ModelState.Inactive:
view.Icon = ViewIcons.IconOne
...

为什么要这样呢?好吧,如果您完全删除模型域并用其他替换域(考虑一下),则只需重构ViewModel域。您的View域类是非明智的。

关于c# - 在C#中的ViewModel中公开模型中的枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24314892/

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