C# WinForm MVVM ComboBox数据绑定

一直没搞懂ComboBox数据绑定时,为什么SelectValue属性绑定无效,今天试了下,在绑定时加了个false和DataSourceUpdateMode解决,就此记录。

复制代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.ComponentModel;
 

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        ViewModel viewModel=new ViewModel();
        public Form1()
        {
            InitializeComponent();
            InitializeControl();
        }
        private void InitializeControl()
        {
            label1.DataBindings.Add(nameof(label1.Text), viewModel, nameof(viewModel.CmbSelectedValue));
            comboBox1.DataBindings.Add(nameof(comboBox1.DataSource), viewModel, nameof(viewModel.CmbDataSource));
            comboBox1.DataBindings.Add(nameof(comboBox1.SelectedValue), viewModel, nameof(viewModel.CmbSelectedValue),false,DataSourceUpdateMode.OnPropertyChanged ); //false代表绑定后不立刻更新,DataSourceUpdateMode指定数据源更新控件实际
            comboBox1.DisplayMember = "Column1";
            comboBox1.ValueMember = "Column2";
        }
    }

    internal class ViewModel : INotifyPropertyChanged
    {
        private Model model=new Model();
        public event PropertyChangedEventHandler PropertyChanged;
        protected void OnPropertyChanged(string propertyName) {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
        public ViewModel()
        {
            CmbSelectedValue = "Initialize";
            CmbDataSource=new DataTable();
            CmbDataSource.Columns.Add("Column1");
            CmbDataSource.Columns.Add("Column2");
            CmbDataSource.Rows.Add("C1-1", "C1-2");
            CmbDataSource.Rows.Add("C2-1", "C2-2");

        }     
        public DataTable CmbDataSource { get { return model.CmbDataSource; } set { model.CmbDataSource = value; OnPropertyChanged(nameof(model.CmbDataSource)); } }
        public string CmbSelectedValue { get { return model.CmbSelectedValue; } set { model.CmbSelectedValue = value; OnPropertyChanged(nameof(model.CmbSelectedValue)); } }
    }
    internal class Model
    {
        public DataTable CmbDataSource { get; set; }
        public string CmbSelectedValue { get; set; }
    }
}
相关推荐
武藤一雄12 分钟前
C# 语法糖详解
后端·microsoft·c#·.net
qq_4798754321 分钟前
C++ 鸭子类型” (Duck Typing)
开发语言·c++
武藤一雄1 小时前
C#:进程/线程/多线程/AppDomain详解
后端·微软·c#·asp.net·.net·wpf·.netcore
勇气要爆发1 小时前
【第一阶段—基础准备】第五章:Python模块和包管理(基础篇)—变形金刚的装备库
开发语言·python
lkbhua莱克瓦241 小时前
Java进阶——IO流
java·开发语言·笔记·学习方法·io流
阿杰同学1 小时前
Java中55种锁,高级面试题,最新面试题
java·开发语言
清晓粼溪1 小时前
SpringCloud01-基础概念
java·开发语言·spring cloud
曹牧2 小时前
在C#中,string和String
开发语言·c#
小白学大数据2 小时前
基于文本检测的 Python 爬虫弹窗图片定位与拖动实现
开发语言·爬虫·python
小白|2 小时前
【OpenHarmony × Flutter】混合开发性能攻坚:如何将内存占用降低 40%?Flutter 引擎复用 + ArkTS 资源回收实战指南
开发语言·javascript·flutter