两个属性 - 第二个属性类型取决于第一个属性

时间:2015-05-27 14:57:13

标签: c# wpf properties

我创建了一个包含两个变量的类: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。有人知道这个问题的解决方案吗?

2 个答案:

答案 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
    }
}