2011-05-26 112 views
0

這是我的Enum代碼:如何檢索組合框選定值作爲枚舉類型?

public enum EmployeeType 
{ 
    Manager, 
    Worker 
} 

我將初始化ComboBox值,而形式初始化本身作爲

combobox1.ItemsSource = Enum.GetValues(typeof(EmployeeType)); 

現在我想要檢索的ComboBox選擇的值作爲EmployeeType枚舉,而不是作爲字符串或整數等

任何幫助表示讚賞。

回答

0

你只需要做相反的事情,對於給定字符串的,什麼是正確類型

EmployeeType result = 
      (EmployeeType)Enum.Parse(typeof(EmployeeType), 
      combobox1.SelectedItem.Content); 

P.S.我不知道如果combobox1.SelectedItem.Content是正確的,我不會做那麼多的WCF。

11
EmployeeType selected = (EmployeeType)combobox1.SelectedItem; 

雖然你可能想首先檢查null(沒有選擇)。

爲了完整,這裏是我設置的示例程序。在XAML:

<Window x:Class="WpfApplication1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition /> 
      <RowDefinition /> 
     </Grid.RowDefinitions> 
     <ComboBox x:Name="_ComboBox" /> 
     <Button Grid.Row="1" Click="Button_Click" /> 
    </Grid> 
</Window> 

和後臺代碼:

using System; 
using System.Windows; 

namespace WpfApplication1 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 
      _ComboBox.ItemsSource = Enum.GetValues(typeof(Whatever)); 
     } 

     public enum Whatever 
     { 
      One, 
      Two, 
      Three, 
      Four 
     } 

     private void Button_Click(object sender, RoutedEventArgs e) 
     { 
      if (_ComboBox.SelectedItem == null) 
      { 
       MessageBox.Show("No Selection"); 
      } 
      else 
      { 
       Whatever whatever = (Whatever)_ComboBox.SelectedItem; 
       MessageBox.Show(whatever.ToString()); 
      } 
     } 
    } 
} 
+0

這將拋出一個錯誤......你需要使用'Enum.Parse' – balexandre 2011-05-26 13:45:51

+2

沒有它贏得「T。我建立了一個測試項目,在我發佈之前進行確認。 – Tim 2011-05-26 13:49:45

0

嘗試是這樣的: 第一組合框分配給GetNames方法,這將填充枚舉的名稱項目而不是數字。 然後處理更改的事件並將字符串解析回枚舉。

public enum EmployeeType 
    { 
     Manaer, 
     Worker 
    } 

    public MainWindow() 
    { 
     InitializeComponent(); 
     this.combobox1.ItemsSource = Enum.GetNames(typeof(EmployeeType)); 
     this.combobox1.SelectionChanged += new SelectionChangedEventHandler(combobox1_SelectionChanged); 
    } 

    void combobox1_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     EmployeeType selection = (EmployeeType)Enum.Parse(typeof(EmployeeType), (string)this.combobox1.SelectedItem); 
     this.ResultsTextBlock.Text = selection.ToString(); 
    } 

有一點需要補充的是,您可以將數據註釋顯示屬性添加到每個枚舉,並編寫將解析枚舉並顯示屬性的名稱屬性,而不是使之更人性化的枚舉的方法。

0

其實,如果我必須這樣做,我就已經建立了一個ObservableCollection<EmployeeType>以前的綁定(用於爲例在您的視圖模型的構造,使用Enum.GetNames(typeof(EmployeeType)),然後遍歷每個值重新分析他們作爲EmployeeType類型。

一旦您的收藏成立,你就必須將其綁定到你的ComboBox,然後選擇項目的時候,你應該retreive一種EmployeeType而不必解析它。

public class VieModel 
{ 
    private ObservableCollection<EmployeeType> _internal; 
    public ViewModel() 
    { 
     _internal = new ObservableCollection<EmployeeType>(); 
     var tempList = Enum.GetNames(typeof(EmployeeType)); 

     foreach(var val in tempList) 
     { 
      EmployeeType et = Enum.Parse(typeof(EmployeeType),val); 
      internal.Add(et); 
     } 
    } 

    public ObservableCollection<EmployeeType> EmployeeTypes 
    { 
     get { return _internal; } 
    } 
} 

然後將視圖模型設置爲d您的組合框結合EmployeeTypes視圖的ATA上下文,並且:

<ComboBox ItemsSource="{Binding EmployeeTypes}" /> 

選定應返回EmployeeType類型的對象。

PS:抱歉代碼拼寫錯誤,我沒有在我身邊的任何C#編輯器現在;)