Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF依赖项属性作为枚举集合_C#_Wpf_Enums_Dependency Properties - Fatal编程技术网

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。。。。。我确实将属性更改为“仅筛选器类型”。我不知道会出什么问题:(