在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 = "中国长江三峡工程发总公司", 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; }
}

而和按钮的单击操作则是由Command属性指定的命令进行处理的,仍然是和MainWindowModel的成员ShowSelectedCompanyCommand关联绑定。这是一个自定义命令,对于当前的按钮而言,具体执行的代码如下所示:

private void ShowSelectedCompanyHandler(object sender, DelegateCommandEventArgs e)
{
    MessageBox.Show(this.CurrentCompany.CompanyName);
}

至此,通过ViewModel的CurrentCompany属性既可以修改下拉列表中的选中项,又可以在ViewModel中获取到下拉列表中的选中项。






  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WPF MVVM框架是一种基于WPF的架构设计模式,它结合了MVP模式与WPF的特性。MVVM是Model-View-ViewModel的简写,它通过利用WPF的数据绑定机制来降低XAML文件和CS文件的耦合度,使UI显示和逻辑代码的耦合度最小化。与传统WinForm开发相比,WPF MVVM框架使用数据绑定来更新UI,并使用命令绑定的方式来处理用户操作,从而降低了耦合度。 在WPF开发MVVM框架充分利用了WPF的技术特性,如绑定、依赖属性、路由事件、命令、数据模板和控制模板等。这些特性使得WPF应用的UI层更加细节化和可定制化。MVVM框架主要由三个部分组成:模型(Model)、视图(View)和视图模型(ViewModel)。模型负责表示业务数据,视图负责展示用户界面,而视图模型是连接模型和视图的桥梁,它通过数据绑定将模型的数据传递给视图,并将视图的用户操作反馈给模型。 使用WPF MVVM框架可以使开发者更加高效地开发复杂的WPF应用,通过将UI和业务逻辑分离,使得代码更加可维护和可测试。此外,MVVM框架也提供了一种良好的团队开发方式,使得开发人员可以专注于各自的领域,提高了开发效率和质量。 总之,WPF MVVM框架是一种在WPF开发广泛应用的架构模式,它通过数据绑定和命令绑定的方式来降低UI和逻辑代码的耦合度,提高了开发效率和代码质量。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [WPF基础系列六:MVVM框架](https://blog.csdn.net/iceberg7012/article/details/115490073)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值