WPF:MVVM对转换器说不,但我需要很好的枚举值

|| 在模型层中,我定义了一个枚举:
public enum MemberStatus
{
    ActiveMember = 0,
    InactiveMember = 1, 
    Associate = 2,
    BoardMember = 3,
    Alumni = 4
}
在我看来,我有一个组合框,其中装有这些枚举值:
<UserControl.Resources>

  <ObjectDataProvider 
      x:Key=\"memberStatusesDataProvider\" 
      ObjectType=\"{x:Type system:Enum}\" 
      MethodName=\"GetValues\">
    <ObjectDataProvider.MethodParameters>
      <x:Type TypeName=\"model:MemberStatus\" />
    </ObjectDataProvider.MethodParameters>
  </ObjectDataProvider>

</UserControl.Resources>
...
<ComboBox 
    ItemsSource=\"{Binding Source={StaticResource memberStatusesDataProvider}}\" 
    SelectedItem=\"{Binding Path=Status}\" />
...
这将导致组合框的选择与枚举中定义的值完全相同。尽管这是我最初的目标,但我希望为用户提供更好的演示,例如: 组合框选择: 活跃成员 无效成员 关联 董事会成员 校友 另外,如果应用程序中的语言发生更改,则我需要该语言的枚举值。为了解决这个问题,我想到的第一件事就是为
MemberStatus
枚举值创建一个转换器。我在以下主题中找到了这篇漂亮的文章:http://www.codeproject.com/KB/WPF/FriendlyEnums.aspx但是MVVM模式表示几乎不需要创建它们-我同意这一点。但是,在此示例中,这种肯定对我不利。 应该怎么做?谢谢。
已邀请:
MVVM使价值转换器过时的观点似乎来自乔希·史密斯(Josh Smith),他在博客文章《 MVVM的哲学》中说: ... ViewModel类本质上是 类固醇的价值转换器,因此 呈现IValueConverter 与大多数界面无关 绑定。 我从中得到的(我同意他的价值)是视图模型负责所有从模型的世界视图到视图的转换,从而使转换器过时。 在Model中具有暴露给UI的枚举(这是一种非常以数据为中心的数据类型)绝对是一种气味-如果仅出于您所看到的原因,向用户显示的信息不理想。 在视图模型中放置从枚举到UI字符串的映射。
转换器比转换3s更有用。转换器也比一次性
viewmodel
更可重用。 我可能想将ѭ5转换为
Brush
,并且可以在视图中全部指定参数。 或者,也许我想将
string
转换为
DateTime
,然后通过数据绑定再次全部返回。也许我想将所有内容都转换为大写。然后是我最喜欢的BoolToVisibilityConverter。 我不愿意在我的9岁以下就都使用显式的直接或间接代码,只是为了让一些少数民族感到高兴。我想让他们忘记的是,可以从Expression Blend轻松访问转换器。 转换器是WPF和essential10ѭ和
viewmodel
之间的补充绑定的重要组成部分。 我认为没有理由不能将它们使用3英镑。
对于WPF的哪些部分是不允许的,MVVM并没有真正确定。如果转换器轻松实现您的目标,则很好用。我什至建议您更进一步,并加一个ѭ13来提供枚举值及其等效字符串。您可以将字符串存储在每个枚举值的ѭ14中。
我不同意MVVM确实使ValueConverters过时了。在不止一种情况下,实现ValueConverter比在ViewModel类中实现转换更有意义。 您可能对WPF应用程序框架(WAF)的BookLibrary示例应用程序感兴趣。它显示了如何在MVVM应用程序中定位枚举。请查看BookLibrary.Presentation / Converters / LanguageToStringConverter类。

要回复问题请先登录注册