首页 > 其他分享 >Combobox后台绑定

Combobox后台绑定

时间:2023-08-15 12:30:17浏览次数:32  
标签:set Name get Combobox 绑定 Student 后台 new public

本文主要介绍WPF中Combobox的后台绑定,我在这里主要讲解数据驱动
1、对于前台绑定,我们首先写出想要绑定的对象
新建一个Models文件夹,将Student类写入

 public class Student
 {
     public int Id { get; set; }
     public string Name { get; set; }
     public int Age { get; set; }
    
 }

2、接下来,我们在前台绑定它

<ComboBox
    Width="200"
    Height="30"
    Margin="10"
    ItemsSource="{Binding Students}" />

3、我们需要用到List或者ObservableCollection将Student封装进去
那么后台代码写

public ObservableCollection<Student> Students { get; set; }
public MainWindowViewModel()
{
    Students = new ObservableCollection<Student>()
    {
        new Student()
        {
            Id = 1,
            Name="张三",
            Age=12
        },
         new Student()
        {
            Id = 2,
            Name="李四",
            Age=12
        },
          new Student()
        {
            Id = 3,
            Name="王五",
            Age=12
        },
    };
}

运行后的结果是
image

现在我们继续改造,我们在前台加入DisplayMemberPath="Name"看看效果

 <ComboBox
     Width="200"
     Height="30"
     Margin="10"
     DisplayMemberPath="Name"
     ItemsSource="{Binding Students}" />

发现,下拉列表变成了Student中的Name
接下来我们继续修改前台代码,加上一个Button

 <StackPanel>
     <!--
         DisplayMemberPath设置下拉框选则的是List的哪一位
         SelectedValue 是鼠标选中的值  传递的地址是SelectedValuePath
     -->
     <ComboBox
         Name="comboBox1"
         Width="200"
         Height="30"
         Margin="10"
         DisplayMemberPath="Name"
         ItemsSource="{Binding Students}"
         SelectedValue="{Binding SelectStudentName}"
         SelectedValuePath="Name" />
     <Button
         Width="200"
         Height="30"
         Command="{Binding OpenCmd}" />
 </StackPanel>

后台加上命令代码

 private string _name;

 public string SelectStudentName
 {
     get { return _name; }
     set { SetProperty<string>(ref _name, value); }
 }

 private DelegateCommand _fieldName;
 public DelegateCommand OpenCmd =>
     _fieldName ?? (_fieldName = new DelegateCommand(ExecuteCommandName));

 void ExecuteCommandName()
 {
     MessageBox.Show(SelectStudentName);
 }

image
既然 SelectedValuePath是选中的值,我们将前台代码修改为SelectedValuePath="Age" />
再试一下
image

接下来,我们在扩展一下,这个主要是用在程序中换皮肤的操作
你想想,很多优秀的程序都有深色、浅色、自定义颜色吧,我这里只是用ComBoBox提供一个思路
代码简洁,实现简单的换肤效果

首先,由于我们暂时只有一个MainWindow,那么资源字典就很好写了
新建一个资源字典,位置随意存放,我直接放在根目录下,你们项目小的话,可以写一个Styles文件夹,专门存放资源字典,项目大的话,写一个Theme类库,存放也行,我这里在根目录简单写一下。

 <Style TargetType="{x:Type local:MainWindow}">
     <Setter Property="Background" Value="{Binding Path=SelectedSkinColor.Color}"/>
 </Style>

在App.xaml引入资源字典

<Application.Resources>
    <ResourceDictionary Source="/SkinColorsStyle.xaml" />
</Application.Resources>

我懒得去重新写对象了,这个皮肤直接放在刚才写的Student了。
你们不要这要写,最好还是重新起一个Skin类

 public class Student
 {
     public int Id { get; set; }
     public string Name { get; set; }
     public int Age { get; set; }
     public Brush Color { get; set; }
 }

接下来就是改造代码。
前台

<ComboBox
    x:Name="comboBox"
    Width="200"
    Height="30"
    Margin="10"
    DisplayMemberPath="Name"
    ItemsSource="{Binding Students}"
    SelectedItem="{Binding Path=SelectedSkinColor}"
    SelectedValuePath="Color" />

后台

 private Student _selectedSkinColor = new Student { Color = Brushes.AliceBlue };
 public Student SelectedSkinColor
 {
     get { return _selectedSkinColor; }
     set
     {
         if (_selectedSkinColor != value)
         {
             _selectedSkinColor = value;
             RaisePropertyChanged();
         }
     }
 }
 //不要忘记刚才实例化的,加上一个字段Color
 //看,我是写在Student中的,你们可以重新写Skin类
   new Student()
  {
      Id = 1,
      Name="张三",
      Age=12,
      Color = Brushes.Blue
  },
  

image
image

标签:set,Name,get,Combobox,绑定,Student,后台,new,public
From: https://www.cnblogs.com/guchen33/p/17630808.html

相关文章

  • 界面组件DevExpress Reporting——支持图表本地化和可绑定属性
    DevExpressReporting是.NETFramework下功能完善的报表平台,它附带了易于使用的VisualStudio报表设计器和丰富的报表控件集,包括数据透视表、图表,因此您可以构建无与伦比、信息清晰的报表。在最近的更新(v23.1)中,官方扩展了DevExpress .NETReports(即XRChart报表控件)中与图表......
  • 普通文件上传,后台常见文件属性(微信上传)
    我这里使用的是nodejs+koa搭建的项目,使用koa-body解析请求体(将请求体数据解析到ctx.request.body中)注:上传时formData的key是file,后台数据ctx.request.files下的属性就是filefilepath:文件上传的初始地址,我这里服务器和接口都是本地,所有地址就是本地上传文件所处路径lastMod......
  • 表单输入绑定v-model
    v-model主要用于表单元素,如输入框、复选框、单选按钮等。通过v-model,你可以将表单元素的值绑定到Vue实例的数据属性,实现数据的双向绑定<template><div><inputtype="text"v-model="message"><p>Message:{{message}}</p></div></template&g......
  • C# ComboBox 使用 DataSource SelectedIndex无法设置的问题
    在C#中如下代码varcbo=newComboBox();cbo.DropDownStyle=ComboBoxStyle.DropDownList;varcbo.DataSource=newint[]{1,2,3};cbo.SelectedIndex=0;cbo.SelectedIndex=1;cbo.SelectedIndex仍然等于-1并不会变成1甚至有可能抛出ArgumentOutOfRange异常ComboBox的......
  • vue3在父子组件使用v-model双向绑定
    父组件:<scriptsetup>importInputBoxfrom"@/compon/InputBox.vue";import{ref}from"vue";constcount=ref(100)</script><template><div>我是父组件,{{count}}<InputBoxv-model="count"&......
  • .NET后台任务-Worker services in .NET
    来自你的消息:怎么理解Workerservicesin.NET?来自ChatAI的消息:WorkerServices是.NETCore中的一个特性,它使开发人员能够轻松创建和托管长时间运行的后台任务或服务。WorkerServices使用.NETCore的异步编程模型和可扩展性,可以在不同的环境中运行,如Windows服务、Linux守......
  • 静态绑定和动态绑定
    在面向对象程序中,绑定指的是一个方法的调用与方法所在的类(方法主体)关联起来,是一个把过程调用和响应调用所需要执行的代码加以结合的过程。绑定分为静态绑定(前期绑定)和动态绑定(后期绑定)。(1)静态绑定:指在程序编译过程中,把函数(方法或者过程)调用与响应调用所需的代码结合的过程。......
  • 后台管理系统权限管理
    原文链接:https://blog.csdn.net/qq_43803757/article/details/126611216权限管理:你可以在后台通过一个tree控件或者其他展示形式给每一个页面动态配置权限,之后将这份路由表存储到后端。当用户登录后得到用户角色,前端根据roles去向后端请求可访问的路由表,从而动态生成可访问......
  • FTData063468_000001升级脚本出错,错误信息:SQL 脚本: 18.000.000.0048 DATA_DSTR_EAP_M
    一、问题:cjt15.0版本升级到18.0提示SQL脚本:18.000.000.0048DATA_DSTR_EAP_Mix_NL-11001出错:已在列上绑定了DEFAULT023-08-1019:46:39开始升级....2023-08-1019:46:39正在校验系统信息,请稍候...2023-08-1019:46:39[(000001)****]:开始升级2023-08-1019:46:39[(......
  • 微信技术分享:揭秘微信后台安全特征数据仓库的架构设计
    本文由腾讯技术工程师remyliu分享,原题“微信万亿数据仓库架构设计与实现”,本文收录时有内容修订和重新排版。1、引言没有足够的特征数据,安全策略将是“无根之木,无源之水”。微信的安全数据特征仓库应运而生,并成为整个安全业务的特征数据存储中心,每天服务了万亿级的特征数据读......