在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中获取到下拉列表中的选中项。
在WPF的MVVM框架中获取下拉选择列表中的选中项的更多相关文章
- openerp模块收藏 移除下拉选择列表中的“创建并编辑”链接(转载)
移除下拉选择列表中的“创建并编辑”链接 原文:http://shine-it.net/index.php/topic,5990.0.html 有时希望下拉列表中列出的项是与主表某个字段关联的,用户只能 ...
- Jquery获取下拉选择节点名称值赋给textbox文本框 获取 父节点的栏目名称编号
<label for="parentNode" style="float:left" >父级栏目:</label> <select ...
- jsp中获取下拉框的value问题
遇到问题 最近快期末考试了,今天想写一个简单的增删改查项目练练手,可是在刚写增加的时候就出现了问题,"增"一直是最简单的操作,本来自付很快就能写完,可是数据库中对应的下拉框数据一直 ...
- ionic 下拉选择框中默认显示传入的参数
开发过程当中遇到一个有趣的问题,如果我在第一个页面需要把 item { "ownerId" : 1 } 传递给第二个页面,并挂在$scope下 $scope.item = $sta ...
- vue 表格中的下拉框单选、多选处理
最近在用vue做前后端分离,需要在表格中用到下拉框,由于需求变动,从最开始的单选变为多选,折腾了许久,记录一下,供后人铺路 vue 中的表格下拉框单选 collectionsColnumOptions ...
- thinter中combobox下拉选择控件(九)
combobox控件,下拉菜单控件 combobox控件在tkinter中的ttk下 简单的实现下: import tkinter from tkinter import ttk # 导入ttk模块, ...
- tkinter中combobox下拉选择控件(九)
combobox控件,下拉菜单控件 combobox控件在tkinter中的ttk下 简单的实现下: import tkinter from tkinter import ttk # 导入ttk模块, ...
- 下拉选择select和复选框checkbox的状态的各种方式
复选框的状态 <input name="ck" value=" " type="checkbox" checked> 或者&l ...
- Ext4中获取下拉框的值
var supplierCombo = Ext.getCmp("rkSupplierCombo_id"); var supplierId = supplierCombo.getV ...
随机推荐
- PHP独立操作符
& 与 ^ 位逻辑异或 $ # ! 逻辑或 ~ 按位取反
- 0x58B 四边形不等式
bzoj1563: [NOI2009]诗人小G 还有优化二维区间DP的,形如f[i][j]min{f[i][k]+f[k][j+1]+val(i,j)} 其中val满足四边形不等式,而且对于任意a&l ...
- ajax跨域POST时执行OPTIONS请求服务端返回403forbidden的解决方法
ajax访问服务端restful api时,由于contentType类型的原因,浏览器会先发送OPTIONS请求. 本人服务端用的是spring mvc框架,web服务器用的是tomcat的,以下给 ...
- 利用python开发的flappy bird 游戏
python 中 pygame模块能让我们很方便的编写游戏,16年我用python 仿制了flappy bird 游戏,下面是游戏的完整代码以及素材,分享给大家. 第一个python文件,flappy ...
- hdu 2444 The Accomodation of Students 判断是否构成二分图 + 最大匹配
此题就是求最大匹配.不过需要判断是否构成二分图.判断的方法是人选一点标记为红色(0),与它相邻的点标记为黑色(1),产生矛盾就无法构成二分图.声明一个vis[],初始化为-1.通过深搜,相邻的点不满足 ...
- C# 学习笔记1 _ 学习要点
程序开始 MainConsole.WriteLine(“换行”);Console.Write(“不换行”);Console.ReadKey(); 等待用户从键盘上键入一个键.Console.Cle ...
- nodejs supervisor安装
使用supervisor提高nodejs调试效率 用超级用户运行npm -g install supervisor命令,说是顺 >$ sudo npm -g install supervisor ...
- SDL2源代码分析
1:初始化(SDL_Init()) SDL简介 有关SDL的简介在<最简单的视音频播放示例7:SDL2播放RGB/YUV>以及<最简单的视音频播放示例9:SDL2播放PCM>中 ...
- 创建一个dynamics CRM workflow (六) - Debugging Custom Workflows
我们也deploy部署了custom workflows, debugging是开发当中不可或缺的一个步骤. debug workflow的步骤和debug有些许不一样: 1. install pro ...
- 三大Flex布局用法(转载)
Flex布局基础 对于Flex 初学者,在Hello World之后,Flex布局便是下一站学习要的要义.若是从传统的Html转变而来,总希望找到类似于Div/Table/UL等之类的控件,也希望在 ...