WPF依赖属性作为枚举集合

时间:2015-06-17 14:56:19

标签: c# wpf enums dependency-properties

我有这样的枚举:

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

我想这样使用:

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

我试图使用它:wpf dependency property enum collection但它没有像我预期的那样工作。 我不希望用户自由键入,我希望他们使用枚举列表。

我该怎么做?

2 个答案:

答案 0 :(得分:0)

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

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

在MSDN中查看此artcile,了解有关标记枚举的更多信息: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))

答案 1 :(得分:0)

假设FilterList是Filter枚举项的集合,它是否可以在XAML中像这样定义它们?

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

除了将转换csv字符串转换为枚举列表之类的转换器之外,我还不确定一种较短的写入方式。