2015-06-17 199 views
2

我有一个这样的枚举:WPF依赖项属性为枚举集

public enum Filter 
{ 
    Filter1, 
    Filter2, 
    Filter3, 
    Filter4 
} 

而且我想用这样的:

<local:myComponent FilterList={Filter.Filter1, Filter.Filter2} /> 

我试图用这样的:wpf dependency property enum collection但didin没有按我的预期工作。 我不想让用户自由输入,我希望他们使用枚举列表。

我该怎么做?

回答

0

编辑:如果您的FilterList是一个集合...嗯,它不应该。或者更好地说,它不一定是一个集合,它只会增加复杂性,使其成为一个。

枚举可以用作标志,这意味着只要您观察一些特殊的注意事项,就可以将多个值设置为单个Enum属性。

入住这artcile在MSDN有关标志枚举的详细信息:https://msdn.microsoft.com/en-us/library/vstudio/ms229062(v=vs.100).aspx

而本作的详细信息:http://www.codeproject.com/Articles/396851/Ending-the-Great-Debate-on-Enum-Flags

但是,基本上,你应该定义枚举如下:

public enum Filter 
{ 
    Filter1 = 1, 
    Filter2 = 2, 
    Filter3 = 4, 
    Filter4 = 8 
} 

然后定义您的FilterList属性,类型为Filter不是集合

public Filter FilterList 
{ 
    get { ... } 
    set { ... } 
} 

一旦你做到了这一点,你可以设置从XAML属性如下:

<local:myComponent FilterList="Filter1, Filter2" /> 

检查本文的详细信息:http://blog.martinhey.de/en/post/2012/06/13/Flagged-enums-and-XAML-syntax.aspx

而且你可以将它设置和检查它以编程方式使用简单的按位操作。

设置:

FilterList = Filter.Filter1 | Filter.Filter2; 

检查:

if ((FilterList & Filter.Filter3) == Filter.Filter3) 

......或者......

if (FilterList.HasFlag(Filter.Filter3)) 
+0

它以编程方式工作,但是当我尝试从XAML()进行设置时,该属性不允许在枚举项目之间使用逗号或空格。它只给出Enum选项,我只能设置一次。 –

+0

也许在你的枚举中设置'[Flags]'属性?我会尝试一下并回到你身边 – almulo

+0

奇怪......我的例子中的代码,没有Flags属性,对我来说工作得很好......您是否将枚举值设置为两个幂,就像我一样? (1,2,4,8,16等) – almulo

0

假设FilterList是枚举筛选项目的集合,它的工作原理,以在你的XAML中如何定义它们?

<local:myComponent> 
    <FilterList> 
     <x:Static local:Filter.Filter1 /> 
     <x:Static local:Filter.Filter2 /> 
    </FilterList> 
</local:myComponent> 

我真的不知道写作,除了也许转换为CSV字符串转换为一个枚举列表的方式更短。