本演示介紹怎樣在WPF的MVVM框架中。通過數據綁定的方式獲取下拉列表中的選中項。程序執行后的效果例如以下圖所看到的:

在線播放: http://v.youku.com/v_show/id_XODA5OTYzMDU2.html
溫馨提示:假設屏幕錄像和代碼不能正常下載,可站內留言。或發郵件到524130780@QQ.COM
XAML代碼例如以下所看到的:
<Window x:Class="Demo02Ex01.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="262" Width="402">
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition />
</Grid.ColumnDefinitions>
<ComboBox Grid.Row="0" Grid.Column="0" Width="300" Height="30"
ItemsSource="{Binding CompanyNames}" DisplayMemberPath="CompanyName"
SelectedItem="{Binding CurrentCompany}" />
<Button Grid.Row="1" Width="100" Height="70" Content="獲取選擇項"
Command="{Binding Path=ShowSelectedCompanyCommand}"/>
</Grid>
</Window>
CS代碼例如以下所看到的:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = new MainWindowModel();
}
}
綜合上述兩端代碼可知,和MainWindow視圖管理的ViewModel類是MainWindowModel類,XAML代碼中的Binding所指的成員就是該ViewModel類中的成員。比方CompanyNames和CurrentCompany都是MainWindowModel的屬性。
MainViewModel類的代碼例如以下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
namespace Demo02Ex01.ViewModels
{
public class MainWindowModel
{
public MainWindowModel()
{
this.CompanyNames = new List<Company>();
this.CompanyNames.Add(new Company() { CompanyName = "中國核工業集團公司", Address = "" });
this.CompanyNames.Add(new Company() { CompanyName = "中國航科技集團公司", Address = "" });
this.CompanyNames.Add(new Company() { CompanyName = "中國電科技集團公司", Address = "" });
this.CompanyNames.Add(new Company() { CompanyName = "中國長江三峽project發總公司", Address = "" });
this.CompanyNames.Add(new Company() { CompanyName = "中國移通信集團公司", Address = "" });
this.CurrentCompany = this.CompanyNames[1];
this.ShowSelectedCompanyCommand = new DelegateCommand(this.ShowSelectedCompanyHandler);
}
public List<Company> CompanyNames { get; set; }
public Company CurrentCompany { get; set; }
public DelegateCommand ShowSelectedCompanyCommand { get; set; }
private void ShowSelectedCompanyHandler(object sender, DelegateCommandEventArgs e)
{
MessageBox.Show(this.CurrentCompany.CompanyName);
}
}
}
通過為ComboBox指定DisplayMemberPath屬性,能夠告知程序要顯示的內容。因為CompanyNames的類型是List<Company>的,因此DisplayMemberPath所指定的字符串就是Company類的CompanyName屬性名。代碼例如以下:
public class Company
{
public string CompanyName { get; set; }
public string Address { get; set; }
}
而和button的單擊操作則是由Command屬性指定的命令進行處理的,仍然是和MainWindowModel的成員ShowSelectedCompanyCommand關聯綁定。這是一個自己定義命令,對於當前的button而言,詳細運行的代碼例如以下所看到的:
private void ShowSelectedCompanyHandler(object sender, DelegateCommandEventArgs e)
{
MessageBox.Show(this.CurrentCompany.CompanyName);
}
至此,通過ViewModel的CurrentCompany屬性既能夠改動下拉列表中的選中項,又能夠在ViewModel中獲取到下拉列表中的選中項。
