当前位置: 首页 > news >正文

wpf之ComboBox

前言

wpf中ComboBox的应用非常广泛,本文就来介绍ComboBox在wpf中的应用。

1、非MVVM模式下

1.1 xaml添加元素

 <ComboBox x:Name="cbx_test1" SelectedIndex=" 0"  ><ComboBoxItem  >小明</ComboBoxItem  ><ComboBoxItem  >小王</ComboBoxItem  ><ComboBoxItem  >小陈</ComboBoxItem  ></ComboBox >

在这里插入图片描述

1.2 代码添加元素

MainWindow是新建wpf程序时的主窗体类

   public MainWindow(){InitializeComponent();cbx_test1.Items.Add("小李");}

1.3 将ComboBox选中的值赋值给string类型的变量

1.3.1 针对xaml添加元素

直接添加事件SelectionChanged

<ComboBox x:Name="cbx_test1" SelectedIndex=" 0"  SelectionChanged="cbx_test1_SelectionChanged"><ComboBoxItem  >小明</ComboBoxItem  ><ComboBoxItem  >小王</ComboBoxItem  ><ComboBoxItem  >小陈</ComboBoxItem  ></ComboBox >

这里需要注意的是利用xaml的ComboBoxItem添加的成员,必须先转换为System .Windows .Controls .ComboBoxItem类型,然后调用Content属性才可以。

   private void cbx_test1_SelectionChanged(object sender, SelectionChangedEventArgs e){string personName =((System .Windows .Controls .ComboBoxItem ) cbx_test1.SelectedItem).Content .ToString ();Console.WriteLine(personName);}

1.3.2 针对代码添加的元素

 <ComboBox x:Name="cbx_test1" SelectedIndex=" 0"  SelectionChanged="cbx_test1_SelectionChanged"></ComboBox >
  public MainWindow(){InitializeComponent();cbx_test1.Items.Add("小李");cbx_test1.Items.Add("小王");cbx_test1.Items.Add("小明");}

对于通过代码添加的成员,可以直接调用ToString ()

   private void cbx_test1_SelectionChanged(object sender, SelectionChangedEventArgs e){string personName = cbx_test1.SelectedItem .ToString ();Console.WriteLine(personName);}

1.4 将ComboBox选中的值赋值给枚举类型的变量

 <ComboBox x:Name="cbx_test1" SelectedIndex=" 0"  SelectionChanged="cbx_test1_SelectionChanged"></ComboBox >
  public partial class MainWindow : Window{public MainWindow(){InitializeComponent();cbx_test1.Items.Add("小李");cbx_test1.Items.Add("小王");cbx_test1.Items.Add("小明");}private void cbx_test1_SelectionChanged(object sender, SelectionChangedEventArgs e){PersonName personName = (PersonName)Enum.Parse(typeof(PersonName), cbx_test1.SelectedItem.ToString());}}enum PersonName{小李,小王,小明}

2、MVVM模式下

2.1 将ComboBox选中的值赋值给string类型的变量

 public  class ViewModelBase{public event PropertyChangedEventHandler PropertyChanged;public void OnPropertyChanged(string propname){if (PropertyChanged != null){PropertyChanged(this, new PropertyChangedEventArgs(propname));}}}
 public class ViewModel : ViewModelBase{public ViewModel(){Items = new List<string>();Items.Add("分时1");Items.Add("分时2");}private List<string> items;public List<string> Items{get{return items;}set{this.items = value;OnPropertyChanged("Items");}}private string selectItem = "分时1";public string  SelectItem{get{return selectItem;}set{this.selectItem = value;OnPropertyChanged("SelectItem");Console.WriteLine(SelectItem);}}}
  public partial class MainWindow : Window{public MainWindow(){InitializeComponent();this.DataContext = new ViewModel();}}

xaml界面代码

 <ComboBox x:Name="cbx_test2" ItemsSource="{ Binding Path=Items}"  SelectedItem ="{Binding  SelectItem}"></ComboBox >

2.2 将ComboBox选中的值赋值给枚举类型的变量

这里使用ComboBox的SelectedIndex,由于需要绑定ViewModel中的枚举类型,但是这两个类型又不匹配,所以要加上类型转换。

public class DivisionTypeToInt : IValueConverter{public object Convert(object value, Type targetType, object parameter, CultureInfo culture){DivisionType divisionType = (DivisionType)value;return (int)divisionType;}public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture){int v = (int)value;DivisionType divisionType=DivisionType.Time1 ;switch (v){case 0:divisionType= DivisionType.Time1;break;case 1:divisionType= DivisionType.Time2;break;}return divisionType;}}
<Window x:Class="wpf之combox.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:wpf之combox" xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"mc:Ignorable="d"Title="MainWindow" Height="450" Width="800"><Window.Resources><local:DivisionTypeToInt x:Key="divisionTypeToInt"/></Window.Resources><Grid><StackPanel ><ComboBox x:Name="cbx_test2" ItemsSource="{ Binding Path=Items}"  SelectedIndex="{Binding  divisionType, Converter={StaticResource divisionTypeToInt}}"></ComboBox ></StackPanel ></Grid>
</Window>
 public  class ViewModelBase{public event PropertyChangedEventHandler PropertyChanged;public void OnPropertyChanged(string propname){if (PropertyChanged != null){PropertyChanged(this, new PropertyChangedEventArgs(propname));}}}
public class ViewModel : ViewModelBase{public ViewModel(){Items = new List<string>();Items.Add("分时1");Items.Add("分时2");}private List<string> items;public List<string> Items{get{return items;}set{this.items = value;OnPropertyChanged("Items");}}private DivisionType _divisionType =DivisionType.Time1 ;public DivisionType divisionType{get{return _divisionType;}set{this._divisionType = value;OnPropertyChanged("divisionType");}}}
  public partial class MainWindow : Window{public MainWindow(){InitializeComponent();this.DataContext = new ViewModel();}}

combox中有分时1、分时2两个选项。
在这里插入图片描述

http://www.lryc.cn/news/626558.html

相关文章:

  • 软件测试面试题真题分享
  • 数据挖掘笔记:点到线段的距离计算
  • 百度Q2财报:总营收327亿 AI新业务收入首次超100亿
  • PDF如何在Adobe Acrobat 中用OCR光学识别文档并保存可编辑文档
  • 【鸿蒙心迹】7×24小时极限求生:当Origin_null遇上鸿蒙,我如何用100杯咖啡换一条跨域活路?
  • 环境搭建:centos7+docker+Oracle
  • 【Day 30】Linux-SQL语句
  • 【爬虫实战-IP代理的重要性二】 以Selenium为例
  • 高通 XR 系列芯介绍
  • 发那科机器人程序调整功能
  • 搭建一个SpringBoot项目的流程
  • 05-网关服务开发指南
  • 使用Spring Retry组件优雅地实现重试
  • 【网络】使用 DNAT 进行负载均衡时,若未配置配套的 SNAT,回包失败
  • 数字IC后端设计实现常见后端问题解析
  • 面试官视角分析与提问点
  • SpringBoot3 Ruoyi芋道管理后台vben5.0
  • 【Express零基础入门】 | 构建简易后端服务的核心知识
  • 【Java后端】Spring Boot 全局异常处理最佳实践
  • ssl代理
  • SED项目复现学习实录
  • Milvus 可观测性最佳实践
  • Linux高效备份:rsync + inotify实时同步
  • Clonezilla live 再生龙还原系统各个版本的不同
  • Jupyter Notebook 的终极进化:VS Code vs PyCharm,数据科学的IDE王者之争
  • 27.语言模型
  • Visual Studio 2010 简体中文旗舰版 安装全过程详解(附安装包下载)
  • 草稿链(CoD):提示词技术的新王者
  • 个人使用AI开发的《PlSqlRewrite4GaussDB(PLSQL自动转换工具)1.0.1 BETA》发布
  • 【考研408数据结构-09】 图论进阶:最短路径与最小生成树