当前位置: 首页 > 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.xdnf.cn/news/1331605.html

相关文章:

  • uniapp学习【上手篇】
  • Ubuntu 重连usb设备(断电和不断电方案)亲测可行
  • 【科研绘图系列】R语言绘制平滑曲线折线图
  • SQL面试题及详细答案150道(41-60) --- 条件查询与分组篇
  • 【报错】Please do not run this script with sudo bash
  • 开源大模型如何选择?GPT-OSS综合评估
  • IDEA切换分支时,提示:Git Checkout Problem
  • 4位量化:常规的线性层被替换成了4位线性层(48)
  • 服务器硬件电路设计之 SPI 问答(二):SPI 与 I2C 的特性博弈及多从机设计之道
  • 基于单片机环境火灾安全检测
  • 27.语言模型
  • 3D max制作蝴蝶结详细步骤(新手可跟)♥️
  • Angular入门教程
  • Angular由一个bug说起之十八:伴随框架升级而升级ESLint遇到的问题与思考
  • 【机器学习】什么是损失景观(Loss Landscape)?
  • FPGA实现Aurora 64B66B图像视频点对点传输,基于GTH高速收发器,提供2套工程源码和技术支持
  • 大数据毕业设计选题推荐-基于大数据的1688商品类目关系分析与可视化系统-Hadoop-Spark-数据可视化-BigData
  • 新手向:使用STM32通过RS485通信接口控制步进电机
  • 实验8.20
  • Feign - 降级选 fallback 还是 fallbackFactory
  • HTTP/1.1 与 HTTP/2 全面对比:性能革命的深度解析
  • Final Cut Pro X Mac fcpx音视频剪辑编辑
  • MacBook Pro M1升级Burp Suite2025.8
  • 实时视频技术选型深度解析:RTSP、RTMP 与 WebRTC 的边界
  • AI on Mac, Your Way!全本地化智能代理,隐私与性能兼得
  • STM32存储结构
  • 【JavaEE】多线程(线程安全问题)
  • 中国大学MOOC-C语言第九周指针(上)
  • 数据结构:利用旋转在AVL树中维持平衡(Inserting in AVL with Rotation)
  • 自建开发工具IDE(一)之拖找排版—仙盟创梦IDE