我创建了一个包含两个变量的类:Type & Value
.如果第一个属性 ( Type
) 已填充,则第二个属性 ( Value
) 只能包含与在 Type
上选择的类型相匹配的值属性(property)。
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
解决这个问题的& System.Windows.Setter
但还没有成功..这似乎与DependsOn
有关属性和 XamlSetTypeConverterAttribute
.有人知道这个问题的解决方案吗?
最佳答案
您可以为值使用支持字段,并在设置时检查每种类型。
public class Requirement
{
public RequirementType Type { get; set; }
private object _value;
public object Value
{
get { return _value; }
set
{
if (Type == RequirementType.OS &&
value.GetType() == typeof(OSType))
{
_value = value;
}
else
{
throw new Exception("Value type is incorrect for Type provided");
}
}
}
}
这个测试会抛出异常:
var req = new Requirement();
req.Type = RequirementType.OS;
req.Value = RequirementType.Connection;
虽然第二次测试将正确设置值:
var req = new Requirement();
req.Type = RequirementType.OS;
req.Value = OSType.Win;
关于c# - 两个属性 - 第二个属性类型取决于第一个属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30486146/