C# 如何将枚举绑定到WPF中的组合框的依赖项属性?
我已经读了好几篇文章和stackoverflow帖子,但我仍然有点执着于如何使这项工作顺利进行 我有一个要绑定到依赖项属性的枚举列表,然后将其绑定到一个组合框。加载程序时,组合框为空 一旦这是工作,我想在框中显示名称(即附件)和十六进制作为值 XAML:C# 如何将枚举绑定到WPF中的组合框的依赖项属性?,c#,wpf,xaml,combobox,enums,C#,Wpf,Xaml,Combobox,Enums,我已经读了好几篇文章和stackoverflow帖子,但我仍然有点执着于如何使这项工作顺利进行 我有一个要绑定到依赖项属性的枚举列表,然后将其绑定到一个组合框。加载程序时,组合框为空 一旦这是工作,我想在框中显示名称(即附件)和十六进制作为值 XAML: <ComboBox ItemsSource="{Binding BodyTypeFlags}" /> 编辑: 我已经按照建议做了,现在可以在组合框中看到枚举项列表。我有两个问题: 如果我保持枚举的原样(Name=Hex),那么当我
<ComboBox ItemsSource="{Binding BodyTypeFlags}" />
编辑:
我已经按照建议做了,现在可以在组合框中看到枚举项列表。我有两个问题:
<Grid.Resources>
<ObjectDataProvider x:Key="tools"
MethodName="GetValues"
ObjectType="{x:Type sys:Enum}">
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="local:Tool" />
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
</Grid.Resources>
<ComboBox x:Name="cmbTools"
ItemsSource="{Binding Source={StaticResource tools}}"
SelectedItem="{Binding Path=ToolType, Mode=TwoWay}" />
您需要为
组合框提供可用值的列表。例如:
public BodyTypeFlagsTS4[] AvailableBodyTypeFlags
{
get { return (BodyTypeFlagsTS4[])Enum.GetValues(typeof(BodyTypeFlagsTS4)); }
}
然后将您的组合框
绑定到列表:
<ComboBox ItemsSource="{Binding AvailableBodyTypeFlags}"
SelectedItem="{Binding BodyTypeFlags}" />
实际上,您不需要依赖属性。在视图模型中实现INotifyPropertyChanged
就足够了。ItemsSource只能绑定到IEnumerable
类型的属性,不能绑定到enum。第二,为什么需要依赖属性呢?这是一个只有链接的答案。关于StackOverflow的回答应该是独立的和永久的。您应该将代码直接放入答案中,而不是提供一个将在一个月内消失的临时链接。我得到了一个错误:名称“BodyTypeFlagsEnum”在名称空间“clr namespace:S4S”中不存在,但我显然在顶部引用了它:xmlns:local=“clr namespace:S4S”。它也在c#中的名称空间中。有什么想法吗?你已经在问题中命名了enum BodyTypeFlagst4。请检查枚举名称。在XAML中,您将本地引用为xmlns:local=“clr namespace:S4S”如果您的应用程序名称空间声明为code
namespace S4Scode
谢谢,我成功了。(这似乎是VS的一个已知错误造成的。)枚举项没有按与我相同的顺序加载到组合框中的原因之一吗?(我把它们按字母顺序排列,但它们不再是了。)还有System.Windows.MessageBox.Show(System.Enum.GetName(typeof(BodyTypeFlagsTS4),this.BodyTypes);空着回来
public BodyTypeFlagsTS4[] AvailableBodyTypeFlags
{
get { return (BodyTypeFlagsTS4[])Enum.GetValues(typeof(BodyTypeFlagsTS4)); }
}
<ComboBox ItemsSource="{Binding AvailableBodyTypeFlags}"
SelectedItem="{Binding BodyTypeFlags}" />