我创建了一个包含两个变量的类:Type & Value
。如果填充了第一个属性(Type
),则第二个属性(Value
)只能包含与Type
属性中选择的类型匹配的值。
public class Requirement
{
public RequirementType Type { get; set; }
public object Value { get; set; }
public enum RequirementType
{
OS, NetFramework, Connection
}
public enum OSType
{
// Used for RequirementType.OS
Win, Unix, MacOSX
}
public enum NetFrameworkType
{
// Used for RequirementType.NetFramework
Two, Three, Four, FourHalf
}
public enum ConnectionType
{
// Used for RequirementType.Connection
Internet, Connected, None
}
}
我在XAML中使用这个类:
<util:Requirement Type="OS" Value="Win" />
例如,如果已选择枚举值OS
。唯一有效的值应来自枚举OSType
。我开始查看.Net来源,他们是如何通过System.Windows.Trigger
&amp; System.Windows.Setter
但尚未成功..似乎属于DependsOn
属性和XamlSetTypeConverterAttribute
。有人知道这个问题的解决方案吗?
答案 0 :(得分:1)
您可以使用支持字段作为值,并在设置时检查每种类型。
var req = new Requirement();
req.Type = RequirementType.OS;
req.Value = RequirementType.Connection;
此测试将抛出异常:
var req = new Requirement();
req.Type = RequirementType.OS;
req.Value = OSType.Win;
虽然第二次测试将正确设置值:
try{
/h/ere code arise exception
}
catch(this is place where Exeption class which hold the exception type throw object){
//here for handling the exception
}
答案 1 :(得分:0)
您可以使用普通属性(键入propful
并点击 Tab ):
private RequirementType _type;
public RequirementType Type
{
get { return _type; }
set
{
_type = value;
// do whatever logic you want here
}
}