WPF Combobox Itemssource是Visibility Enum

时间:2018-03-09 10:29:40

标签: c# wpf xaml binding

所以我有一个简单的问题;我想在ComboBox中显示System.Windows.Visibility枚举。但是,我似乎没有找到它的路径。像一个疯子一样搜索,但找不到任何知道这个枚举的人。

我知道这可以在代码中完成(并且已经有了它)但我更喜欢在XAML中完成。

有人可以帮帮我吗?

4 个答案:

答案 0 :(得分:3)

瞧:

<ComboBox SelectedIndex="0">
       <Visibility>Visible</Visibility>
       <Visibility>Collapsed</Visibility>
       <Visibility>Hidden</Visibility>
</ComboBox>

不需要额外的命名空间。

答案 1 :(得分:0)

@ Maciek的解决方案是最简单,最快速的解决方案,但更常见的纯 XAML 列出枚举值的方法是这样的:

<FrameworkElement.Resources>
    <ObjectDataProvider x:Key="ItemsSource"
                        ObjectType="{x:Type sys:Enum}"
                        MethodName="GetValues"
                        xmlns:sys="clr-namespace:System;assembly=mscorlib">
        <ObjectDataProvider.MethodParameters>
            <x:Type TypeName="Visibility" />
        </ObjectDataProvider.MethodParameters>
    </ObjectDataProvider>
</FrameworkElement.Resources>
(...)
<ComboBox ItemsSource="{Binding Source={StaticResource ItemsSource}}" />

然后,您只需将Visibility替换为任何其他枚举类型即可获取其值列表。

答案 2 :(得分:0)

如果要将枚举值绑定到ItemsSource,则需要ViewModel中具有枚举值的属性。您必须将ItemsSource绑定到此属性。你得到这样的枚举值:

Enum.GetValues(typeof(EffectStyle)).Cast<EffectStyle>();

如果找不到属性的路径,则表示您的DataContext错误。如果您没有使用MVVM,请将其设置为ViewModel类或窗口。在最简单的场景中,您可以在Window构造函数中将DataContext设置为您的窗口。

this.DataContext = this;

查看thisthis链接,作为WPF中DataContext和Binding的大图。 如果您有兴趣,还可以阅读WPF中的MVVM。您可以使用MVVM Light

如果你想要一个完整的xaml解决方案,你的枚举绑定到ComboBox,你可以像this一样写或者像here一样使用ObjectDataProvider。 我认为Maciek的解决方案在你的情况下已经足够好了。

答案 3 :(得分:0)

如果您想使用代码执行此操作,请假设您的组合框具有x:name = my combo,您可以这样做:

mycombo.ItemsSource = Enum.GetValues(typeof(Visibility)).Cast<Visibility>();