我已经阅读了几篇文章和stackoverflow帖子,但我仍然对如何使这项工作感到困惑。
我有一个枚举列表,我想绑定到依赖属性,然后绑定到组合框。当我加载程序时,组合框是空的。
一旦这个工作,我想在框中显示名称(即附件),并将十六进制显示为值。
XAML:
<ComboBox ItemsSource="{Binding BodyTypeFlags}" />
C#:
public enum BodyTypeFlagsTS4
{
Accessory = 0x0000000A,
Blush = 0x00000020
}
public BodyTypeFlagsTS4 BodyTypeFlags
{
get { return (BodyTypeFlagsTS4)GetValue(BodyTypeFlagsProperty); }
set { SetValue(BodyTypeFlagsProperty, value); }
}
public static readonly DependencyProperty BodyTypeFlagsProperty =
DependencyProperty.Register("BodyTypeFlags", typeof(BodyTypeFlagsTS4),
typeof(MainWindow), new PropertyMetadata(default(BodyTypeFlagsTS4)));
修改 我按照建议完成了,现在我可以在组合框中看到枚举项列表。我有两个问题:
如果我删除= hex部分(因此,它只有附件和腮红),那么每次都会使用附件返回测试按钮。即使我选择了脸红。 (我不想改变枚举格式,但这告诉我双向绑定不起作用。)
public BodyTypeFlagsTS4 BodyTypes
{
get { return (BodyTypeFlagsTS4)GetValue(BodyTypesProperty); }
set { SetValue(BodyTypesProperty, value); }
}
public static readonly DependencyProperty BodyTypesProperty =
DependencyProperty.Register("BodyTypes", typeof(BodyTypeFlagsTS4), typeof(MainWindow), new PropertyMetadata());
private void Button_Click(object sender, RoutedEventArgs e)
{
Dispatcher.BeginInvoke(new Action(() =>
{
System.Windows.MessageBox.Show(System.Enum.GetName(typeof(BodyTypeFlagsTS4), this.BodyTypes));
}));
}
答案 0 :(得分:2)
您需要提供ComboBox
的可用值列表。例如:
public BodyTypeFlagsTS4[] AvailableBodyTypeFlags
{
get { return (BodyTypeFlagsTS4[])Enum.GetValues(typeof(BodyTypeFlagsTS4)); }
}
然后将ComboBox
绑定到列表:
<ComboBox ItemsSource="{Binding AvailableBodyTypeFlags}"
SelectedItem="{Binding BodyTypeFlags}" />
并且您实际上并不需要依赖项属性。在视图模型中实现INotifyPropertyChanged
就足够了。
答案 1 :(得分:1)
试试这个解决方案: Zip with solution
通常,您必须用对象包装枚举。 查看注释掉的代码,了解如何检索枚举的名称。
XAML代码的一部分:
<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}" />