• 在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中获取到下拉列表中的选中项。






  • 相关阅读:
    bzoj 3876: [Ahoi2014&Jsoi2014]支线剧情【有上下界有源汇最小费用最大流】
    bzoj 2055: 80人环游世界【有上下界有源汇最小费用最大流】
    bzoj 2406: 矩阵【二分+有源汇上下界可行流】
    bzoj 4873: [Shoi2017]寿司餐厅【最大权闭合子图】
    bzoj 2007: [Noi2010]海拔【最小割+dijskstra】
    bzoj 2039: [2009国家集训队]employ人员雇佣【最小割】
    bzoj 3996: [TJOI2015]线性代数【最小割】
    bzoj 3158: 千钧一发【最小割】
    bzoj 2597: [Wc2007]剪刀石头布【最小费用最大流】
    bzoj 5120: [2017国家集训队测试]无限之环【最小费用最大流】
  • 原文地址:https://www.cnblogs.com/cynchanpin/p/6940834.html
Copyright © 2020-2023  润新知