当前位置: 首页 > 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.dtcms.com/a/340373.html

相关文章:

  • DRF序列化器
  • DeepSeek V3.1 完整评测分析:2025年AI编程新标杆
  • ⭐CVPR2025 给3D高斯穿 “UV 衣” 框架[特殊字符]
  • 路由器NAT的类型测定
  • KubeBlocks AI:AI时代的云原生数据库运维探索
  • Redux 核心概念详解
  • Flutter开发 json_serializable json数据解析
  • 关联规则挖掘2:FP-growth算法(Frequent Pattern Growth,频繁模式增长)
  • rsync + inotify 数据实时同步
  • Android 入门到实战(三):ViewPager及ViewPager2多页面布局
  • 性能测试报告深度解析:从冰冷数据到火热洞察
  • android kernel代码 common-android13-5.15 下载 编译
  • Linux系统:C语言进程间通信信号(Signal)
  • RK3576赋能无人机巡检:多路视频+AI识别引领智能化变革
  • deque的原理与实现(了解即可)
  • 基于截止至 2025 年 6 月 4 日,在 App Store 上进行交易的设备数据统计,iOS/iPadOS 各版本在所有设备中所占比例详情
  • 比剪映更轻量!SolveigMM 视频无损剪切实战体验
  • shell变量进阶
  • 基于51单片机自动浇花1602液晶显示设计
  • Ubuntu-安装Epics Archiver Appliance教程
  • 玳瑁的嵌入式日记D21-08020(数据结构)
  • 服务器内存条不识别及服务器内存位置图
  • 认识Node.js及其与 Nginx 前端项目区别
  • 动手学深度学习(pytorch版):第五章节—多层感知机(1)层和块
  • 从异构计算视角审视ARM与FPGA:架构融合驱动智能时代计算范式革新
  • mybatis xml中表名 字段报红解决
  • S32K328(Arm Cortex-M7)适配CmBacktrace错误追踪
  • 生产电路板的公司有哪些?国内生产电路板的公司
  • 05-网关服务开发指南
  • 从零实现自定义顺序表:万字详解 + 完整源码 + 图文分析