1. 程式人生 > >繼續聊WPF——獲取ComboBox中繫結的值

繼續聊WPF——獲取ComboBox中繫結的值

千萬不要認為WPF中的資料繫結會很複雜,儘管它的確比Winform程式靈活多了,但其本質是不變的,特別是ComboBox控制元件,我們知道在Winform中對該控制元件的有兩個專為資料繫結而設定的屬性——DisplayMenber和ValueMenber,分別繫結用於顯示和用於存放使用者選擇值兩個欄位,最典型的應用類似於key-value形式的資料欄位,如學生表中的學號(ID)和學生姓名。

其實,在WPF中原理都是一樣的,來,我們一起動手玩玩。

如何新建應用程式就不用介紹了,省略33個字。

在視窗中拖放一個ComboBox控制元件和一個按鈕,按鈕用來檢測所選擇的值。

圖片

切換到程式碼檢視,定義一個Employee類和一個列表。

[csharp] view plain copy  print?
  1. publicclass Employee  
  2. {  
  3.  publicstring Name{set;get;}  
  4.  publicint EmpID{ set;get; }  
  5. }  
  6.    publicclass EmployeeArr : ObservableCollection<Employee>  
  7.    {  
  8.        public EmployeeArr()  
  9.        {  
  10.            this.Add(new Employee { EmpID = 1, Name = 
    "林鳥" });  
  11.            this.Add(new Employee { EmpID = 2, Name = "小胡" });  
  12.            this.Add(new Employee { EmpID = 3, Name = "小字" });  
  13.            this.Add(new Employee { EmpID = 4, Name = "小牛X" });  
  14.            this.Add(new Employee { EmpID = 5, Name = "王狗" });  
  15.        }  
  16.    }  

然後在XAML中加入資源列表中

[html] view plain copy  print?
  1. <Window
  2.  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3.  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4.  x:Class="ComboBox_Binding_sample.MainWindow"
  5.  x:Name="Window"
  6.  Title="MainWindow"
  7.  Width="200"Height="120"
  8.     xmlns:c="clr-namespace:ComboBox_Binding_sample">
  9.     <Window.Resources>
  10.         <c:EmployeeArrx:Key="EmpCols"/>
  11.     </Window.Resources>
  12.  .......  
  13. </Window>

然後,把ComboBox繫結到資源中的集合。

[html] view plain copy  print?
  1. <ComboBoxx:Name="cmb"Margin="8,8,8,7.04"ItemsSource="{StaticResource EmpCols}"
  2.                 DisplayMemberPath="Name"
  3.                 SelectedValuePath="EmpID"/>
  4. <ButtonMargin="28,6,28,6"Content="顯示選定的值"Grid.Row="1"
  5.               Click="Button_Click"/>

最後完成按鈕的單擊事件

[csharp] view plain copy  print?
  1. privatevoid Button_Click(object sender, RoutedEventArgs e)  
  2. {  
  3.     if (this.cmb.SelectedIndex != -1)  
  4.     {  
  5.         MessageBox.Show("你選擇的員工編號為:\n" +  
  6.             cmb.SelectedValue);  
  7.     }  
  8. }  

執行一下就能得到效果了。

圖片

圖片

前文中剛討論完依賴項屬性,我們不妨這裡也用上它的實時更新功能。

[html] view plain copy  print?
  1. <Windowx:Class="ComboBox_Binding_sample.W02"
  2.     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3.     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4.     Title="W02"Height="130"Width="270"
  5.     xmlns:c="clr-namespace:ComboBox_Binding_sample">
  6.     <Window.Resources>
  7.         <c:EmployeeArrx:Key="ec"/>
  8.     </Window.Resources>
  9.     <Grid>
  10.         <Grid.RowDefinitions>
  11.             <RowDefinitionHeight="*"/>
  12.             <RowDefinitionHeight="*"/>
  13.         </Grid.RowDefinitions>
  14.         <ComboBoxx:Name="cmb"Grid.Row="0"Margin="10,8,10,8"ItemsSource="{StaticResource ec}"
  15.                   DisplayMemberPath="Name"SelectedValuePath="EmpID"/>
  16.         <TextBlockGrid.Row="1"VerticalAlignment="Center"FontSize="18"
  17.                    HorizontalAlignment="Center"
  18.                    Text="{Binding ElementName=cmb,Path=SelectedValue}"/>
  19.     </Grid>
  20. </Window>

這樣,只要我們選擇的項改變,文字塊中就會實時顯示員工ID。

圖片

轉自:http://blog.csdn.net/tcjiaan/article/details/6941601