Joh*_*ink 0 c# enums mvvm xamarin visual-studio-2013
我有一个 Xamarin 项目,它由一个 Models 项目、一个 ViewModels 项目和一个针对要发布应用程序的每个平台的“View”项目组成。Models 项目链接到 View Models 项目,但不(直接)由 Views 项目使用。
问题是我在模型项目中有一对枚举,我想在视图中使用它们,而不将视图项目链接到模型。有没有办法将这些枚举类型公开给视图?
我现在正在做的是复制/粘贴模型枚举,然后将模型枚举类型转换为 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){
//...
}
Run Code Online (Sandbox Code Playgroud)
我目前所做的:
//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){
//...
}
Run Code Online (Sandbox Code Playgroud)
嗯,这应该属于 ViewModel 的责任。ViewModel 的全部要点是将模型域转换为视图域能够消化的内容。如果这意味着创建一个新的枚举,那就这样吧。这就是自动映射器发挥作用的地方。
附带说明一下。我发现从视图域之外使用枚举无论如何都是一种不好的模式,因为它将逻辑带入视图中。就我个人而言,我不会公开了解有关枚举类型的任何(直接)信息。如果我需要由于特定的枚举值而导致视图更改行为,那么我可以在 ViewModel 中使用该逻辑。
更新:
视图的目标应该是删除所有业务逻辑。因此,在您的情况下,您是说您希望视图根据某些模型状态更改其图标。您似乎面临的问题是您不希望视图直接访问模型枚举类型。所以不要这样做,并扭转你的想法。有一个使用自己的枚举的视图:
enum ViewIcons
{
IconOne,
IconTwo,
}
Run Code Online (Sandbox Code Playgroud)
...从您的您ViewModel可以设置
view.Icon = ViewIcons.IconOne
Run Code Online (Sandbox Code Playgroud)
假设您在 ViewModel 中进行了更新
void Update()
{
switch(_model.State)
{
case ModelState.Inactive:
view.Icon = ViewIcons.IconOne
...
Run Code Online (Sandbox Code Playgroud)
为什么要这样做呢?好吧,如果您完全删除模型域并用不同的东西替换它(想一想),您只需要重构您的 ViewModel 域。您的视图域类并不明智。
| 归档时间: |
|
| 查看次数: |
3040 次 |
| 最近记录: |