【发布时间】:2015-08-09 18:09:12
【问题描述】:
我创建了一个包含两个变量的类: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 和 System.Windows.Setter 解决这个问题,但还没有成功。这似乎与 DependsOn 属性和 XamlSetTypeConverterAttribute 有关。有人知道这个问题的解决方案吗?
【问题讨论】:
-
为什么你需要一个单独的类呢?我有 3 个课程
OSRequirement、NetFrameworkRequirement和ConnectionRequirement -
我想这样解决。但如果无法实现,我肯定会使用它作为后备。
-
为什么是
Value is object? -
这是一个很好的问题,他们是如何实现触发器和设置器的。
-
像@weston 一样,我建议使用不同的类(可能会或可能不会从公共基类继承)。原因很简单:在 XAML 中,属性没有顺序:用户可以在
Type属性之前设置Value属性。这也意味着 XAML 解析器可以按任何顺序评估它们。
标签: c# wpf properties