文章概述:

本演示介绍怎样在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中获取到下拉列表中的选中项。

在WPF的MVVM框架中获取下拉选择列表中的选中项的更多相关文章

  1. openerp模块收藏 移除下拉选择列表中的“创建并编辑”链接(转载)

    移除下拉选择列表中的“创建并编辑”链接 原文:http://shine-it.net/index.php/topic,5990.0.html 有时希望下拉列表中列出的项是与主表某个字段关联的,用户只能 ...

  2. Jquery获取下拉选择节点名称值赋给textbox文本框 获取 父节点的栏目名称编号

    <label for="parentNode" style="float:left" >父级栏目:</label> <select ...

  3. jsp中获取下拉框的value问题

    遇到问题 最近快期末考试了,今天想写一个简单的增删改查项目练练手,可是在刚写增加的时候就出现了问题,"增"一直是最简单的操作,本来自付很快就能写完,可是数据库中对应的下拉框数据一直 ...

  4. ionic 下拉选择框中默认显示传入的参数

    开发过程当中遇到一个有趣的问题,如果我在第一个页面需要把 item { "ownerId" : 1 } 传递给第二个页面,并挂在$scope下 $scope.item = $sta ...

  5. vue 表格中的下拉框单选、多选处理

    最近在用vue做前后端分离,需要在表格中用到下拉框,由于需求变动,从最开始的单选变为多选,折腾了许久,记录一下,供后人铺路 vue 中的表格下拉框单选 collectionsColnumOptions ...

  6. thinter中combobox下拉选择控件(九)

    combobox控件,下拉菜单控件 combobox控件在tkinter中的ttk下 简单的实现下: import tkinter from tkinter import ttk # 导入ttk模块, ...

  7. tkinter中combobox下拉选择控件(九)

    combobox控件,下拉菜单控件 combobox控件在tkinter中的ttk下 简单的实现下: import tkinter from tkinter import ttk # 导入ttk模块, ...

  8. 下拉选择select和复选框checkbox的状态的各种方式

    复选框的状态 <input name="ck" value=" " type="checkbox"  checked> 或者&l ...

  9. Ext4中获取下拉框的值

    var supplierCombo = Ext.getCmp("rkSupplierCombo_id");  var supplierId = supplierCombo.getV ...

随机推荐

  1. 学习 java netty (一) -- java nio

    前言:近期在研究java netty这个网络框架,第一篇先介绍java的nio. java nio在jdk1.4引入,事实上也算比較早的了.主要引入非堵塞io和io多路复用.内部基于reactor模式 ...

  2. hdoj--2063--过山车(最大匹配)

    过山车 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  3. Ice_cream’s world III

    Ice_cream's world III Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Othe ...

  4. DBS-PowerDesginer:PowerDesigner最基础的使用方法入门学习

    ylbtech-DBS-PowerDesginer:PowerDesigner最基础的使用方法入门学习 1.返回顶部 1. 1:入门级使用PowerDesigner软件创建数据库(直接上图怎么创建,其 ...

  5. Comparable与Comparator源码分析

    package java.lang; import java.util.*; /** * This interface imposes a total ordering on the objects ...

  6. js设计模式-适配器模式

    说明:适配器模式表面上看起来像门面模式.它们都要对别的对象进行包装并改变其呈现的接口.但是两者的差别在于它们如何改变接口.门面元素展现的是一个简化的接口,它并不提供额外的选择,而且有时为了方便完成常见 ...

  7. 快速排序c++实现 快排C++代码实现

    快速排序c++实现 快排C++ 第一.算法描述 快速排序由C. A. R. Hoare在1962年提出,该算法是目前实践中使用最频繁,实用高效的最好排序算法, 快速排序算法是采用分治思想的算法,算法分 ...

  8. .net中的母版页中使用FindControl的使用

    前几天,遇到一个字段比较多的用户填写的页面(数据库表中就将近100个字段),怎么讲这些input的标签的值,保存数据库了?(使用的是母版页下面的aspx,不包括前段获取input的值,传给后台) 作为 ...

  9. levelDB数据库使用及实例 - 高性能nosql存储数据库

    LevelDB是google公司开发出来的一款 超高性能kv存储引擎,以其惊人的读性能和更加惊人的写性能在轻量级nosql数据库中鹤立鸡群. 此开源项目目前是支持处理十亿级别规模Key-Value型数 ...

  10. 腾讯云TrustAsia DV SSL CA证书的申请及使用

    1.证书申请及管理     对于已经拥有域名及公网服务器的用户,可以通过腾讯云申请TrustAsia DV SSL CA证书,证书申请流程包含填写基本信息和域名认证两步,非常清晰和简单,没有什么需要过 ...