在WPF的MVVM框架中獲取下拉選擇列表中的選中項


文章概述:

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


相關下載(代碼、屏幕錄像)http://pan.baidu.com/s/1sjwN357
在線播放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中獲取到下拉列表中的選中項。







免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM