什么都不说,先看代码
枚举:
namespace WpfAppTest { public enum Week { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday } }
页面:
<Window x:Class="WpfAppTest.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:local="clr-namespace:WpfAppTest" mc:Ignorable="d" Title="MainWindow" Height="350" Width="525"> <Grid> <Grid.Resources> <ObjectDataProvider x:Key="NameWeek" MethodName="GetNames" ObjectType="{x:Type sys:Enum}"> <ObjectDataProvider.MethodParameters> <x:Type TypeName="local:Week"/> </ObjectDataProvider.MethodParameters> </ObjectDataProvider> <ObjectDataProvider x:Key="ValueWeek" MethodName="GetValues" ObjectType="{x:Type sys:Enum}"> <ObjectDataProvider.MethodParameters> <x:Type TypeName="local:Week"/> </ObjectDataProvider.MethodParameters> </ObjectDataProvider> </Grid.Resources> <ComboBox SelectedValue="{Binding SelectedWeek}" ItemsSource="{Binding Source={StaticResource NameWeek}}" HorizontalAlignment="Left" Height="50" Margin="38,40,0,0" VerticalAlignment="Top" Width="150"/> <ComboBox SelectedValue="{Binding SelectedWeek}" ItemsSource="{Binding Source={StaticResource ValueWeek}}" HorizontalAlignment="Left" Height="50" Margin="288,40,0,0" VerticalAlignment="Top" Width="150"/> </Grid> </Window>
后台:
using System.Windows; namespace WpfAppTest { /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); DataContext = this; } public Week SelectedWeek { get { return (Week)GetValue(SelectedWeekProperty); } set { SetValue(SelectedWeekProperty, value); } } public static readonly DependencyProperty SelectedWeekProperty = DependencyProperty.Register("SelectedWeek", typeof(Week), typeof(MainWindow), new PropertyMetadata(default(Week))); } }
之前看网上的例子都是用GetNames反射的,但绑了SelectedValue却只能从界面到后台,后来看了Enum的代码才明白要用GetValues
System.Enum:
public static string[] GetNames(Type enumType); public static Array GetValues(Type enumType);