作为枚举集合的 WPF 依赖项属性

本文关键字:依赖 属性 WPF 枚举 集合 | 更新日期: 2023-09-27 17:56:50

我有一个这样的枚举:

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

我想像这样使用:

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

试图使用它:wpf 依赖项属性枚举集合,但它没有像我预期的那样工作。我不希望用户自由输入,我希望他们使用枚举列表。

我应该怎么做?

作为枚举集合的 WPF 依赖项属性

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

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

有关标志枚举的详细信息,请查看 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))

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

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

我不太确定是否有更短的编写方式,除了将 csv 字符串转换为枚举列表的转换器。