C# WPF依赖项属性作为枚举集合
我有这样一个枚举:C# WPF依赖项属性作为枚举集合,c#,wpf,enums,dependency-properties,C#,Wpf,Enums,Dependency Properties,我有这样一个枚举: public enum Filter { Filter1, Filter2, Filter3, Filter4 } <local:myComponent FilterList={Filter.Filter1, Filter.Filter2} /> 我想这样使用: public enum Filter { Filter1, Filter2, Filter3, Filter4 } <local:myCompo
public enum Filter
{
Filter1,
Filter2,
Filter3,
Filter4
}
<local:myComponent FilterList={Filter.Filter1, Filter.Filter2} />
我想这样使用:
public enum Filter
{
Filter1,
Filter2,
Filter3,
Filter4
}
<local:myComponent FilterList={Filter.Filter1, Filter.Filter2} />
我试着用这个:但它没有像我预期的那样工作。
我不希望用户自由键入,我希望他们使用枚举列表
我应该怎么做呢?编辑:如果您的
过滤器列表是一个集合。。。不应该。或者更好地说,它不必是一个集合,它只会增加复杂性,使之成为一个集合
枚举可以用作标志,这意味着您可以将多个值设置为单个枚举属性,只要您遵守一些特殊注意事项
有关标志枚举的更多信息,请查看MSDN中的此图表:
有关更多信息,请参阅:
但是,基本上,您应该如下定义枚举:
public enum Filter
{
Filter1 = 1,
Filter2 = 2,
Filter3 = 4,
Filter4 = 8
}
<local:myComponent FilterList="Filter1, Filter2" />
然后将FilterList属性定义为仅为过滤器
类型,而不是集合
public Filter FilterList
{
get { ... }
set { ... }
}
完成此操作后,可以从XAML设置属性,如下所示:
public enum Filter
{
Filter1 = 1,
Filter2 = 2,
Filter3 = 4,
Filter4 = 8
}
<local:myComponent FilterList="Filter1, Filter2" />
检查:
if ((FilterList & Filter.Filter3) == Filter.Filter3)
……或者
if (FilterList.HasFlag(Filter.Filter3))
假设FilterList
是过滤器枚举项的集合,在XAML中这样定义它们是否有效
<local:myComponent>
<FilterList>
<x:Static local:Filter.Filter1 />
<x:Static local:Filter.Filter2 />
</FilterList>
</local:myComponent>
我真的不确定是否有一种更短的编写方法,除了将csv字符串转换为枚举列表的转换器。它是通过编程实现的,但当我尝试从XAML()设置时,该属性不允许在枚举项之间使用逗号甚至空格。它只提供枚举选项,我只能设置一次。是否可以在枚举中设置[Flags]
属性?我会试试,然后回来找你。。。我的示例中的代码没有Flags属性,对我来说很好。。。您是否像我一样将枚举值设置为二的幂?(1、2、4、8、16等)更重要的是。。。您是否更改了FilterList属性,使其仅为Filter类型,而不是集合?我完全按照您所说的做了,我的枚举设置为1、2、4、8、16、32、64。。。。。我确实将属性更改为“仅筛选器类型”。我不知道会出什么问题:(