Evi*_*Str 5 c# wpf enums dependency-properties
我有一个这样的枚举:
public enum Filter
{
Filter1,
Filter2,
Filter3,
Filter4
}
Run Code Online (Sandbox Code Playgroud)
我想像这样使用:
<local:myComponent FilterList={Filter.Filter1, Filter.Filter2} />
Run Code Online (Sandbox Code Playgroud)
我试图使用这个:wpf 依赖属性枚举集合,但它没有按我预期的那样工作。我不希望用户自由输入,我希望他们使用枚举列表。
我该怎么做?
编辑:如果你FilterList是一个集合......那么,它不应该。或者更好地说,它不一定是一个集合,它只会增加复杂性以使其成为一个集合。
枚举可以用作标志,这意味着只要遵守一些特殊注意事项,您就可以为单个枚举属性设置多个值。
有关标志枚举的更多信息,请查看 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
}
Run Code Online (Sandbox Code Playgroud)
然后将 FilterList 属性定义为Filter仅类型,而不是集合。
public Filter FilterList
{
get { ... }
set { ... }
}
Run Code Online (Sandbox Code Playgroud)
完成此操作后,您可以从 XAML 设置该属性,如下所示:
<local:myComponent FilterList="Filter1, Filter2" />
Run Code Online (Sandbox Code Playgroud)
查看这篇文章以获取更多信息:http://blog.martinhey.de/en/post/2012/06/13/Flagged-enums-and-XAML-syntax.aspx
您可以使用简单的按位运算以编程方式设置和检查它。
环境:
FilterList = Filter.Filter1 | Filter.Filter2;
Run Code Online (Sandbox Code Playgroud)
检查:
if ((FilterList & Filter.Filter3) == Filter.Filter3)
Run Code Online (Sandbox Code Playgroud)
...或者...
if (FilterList.HasFlag(Filter.Filter3))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
532 次 |
| 最近记录: |