我有问题找到一个通用的解决方案来处理WPF和WCF上的枚举字段,我需要一点帮助。让我们用一个例子解释:未定义的枚举和WPF组合框和WCF序列化
当创建一个性别枚举值男,女]一个人,我看到三个posibilites:
男是默认 - >有两种posibilities但一个是默认。没有问题结合ComboBox.SelectedValue与WCF序列化没有问题,只要没有女性感到ofended :)
((性别)(3))不定值是默认 - >有两种posibilities但在开始用户被迫选择一个。 ComboBox.SelectedValue正确设置SelectedIndex = -1,但WCF抛出: 枚举值'3'对'Sex'类型无效,无法序列化。如果类型具有DataContractAttribute属性,请确保存在必要的枚举值并使用EnumMemberAttribute属性标记。
性属性可为空 - >它可以设置性别和你甚至可以取消它一旦你选择一个。
不幸的是,情况2是最常见的一种,但我们没有看到一个简单的方法来处理它不做像黑客:
- 定义“未知”的价值性,这个值对实体无效,我会考虑它是否不是最常见的情况。
- 将枚举标记为[Flags],因此WCF可以将“Male,Female”编码为未知。
- 用类似[ComboHintUnkwnownOnNew]的装饰来装饰性别。
- Set SelectedIndex = -1,同时保持绑定一些WPF中的方式。
我知道是一个思想设计的决定,而不是一个具体的问题,但我希望得到一些帮助。
你能解释一下你是如何在这里使用WCF并提供一些XAML以及回答?我没有遇到过通过WCF发送并显示在WPF中的枚举属性的任何问题。如果枚举未定义,那么显然必须强制用户在序列化之前选择一个值,但是要写出这必须在开始时发生。你能用一些代码/ XAML来解释吗? – Holstebroe 2010-09-21 11:23:21
由于构建通用解决方案的目的,我们希望将不完整的实体发送到服务器,例如要知道实体是否已授权或可用的操作。 很难挑选一段简单的代码,但是需要的是能够在实体属性本身编码树描述的解决方案,并且知道用户是否选择了一架飞机。 – Olmo 2010-09-22 11:27:23