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; }
    }
}
相关推荐
死磕音视频4 小时前
让小模型做选择题:限定候选项并读取 logits 概率的入门实践(附 Python 代码)
开发语言·python·大模型·文本分类·transformers
顽疲7 小时前
Java vue 养老系统源码详解:月账单 care_month_bill 与 Quartz 扣费 Job 实践
java·开发语言·vue.js·vue养老·springboot养老·java养老
Wang's Blog7 小时前
Java 项目实战: 交友项目 - 安装开发工具与环境准备
java·开发语言·交友
曹牧7 小时前
C#:输入的字符串格式不正确
c#
程序喵大人9 小时前
【C++入门】编译链接模型 - 07 链接器怎样把符号对上号
开发语言·c++·编译器·编译链接·链接器
微三云 - 廖会灵 (私域系统开发)9 小时前
供应链系统实战:多渠道订单聚合与分布式库存一致性方案总结
开发语言·分布式·php
学逆向的9 小时前
C 数据溢出与精度丢失
c语言·开发语言·网络安全
霸道流氓气质10 小时前
AgentFlow 入门与实战:Task-Based 并发、EWMA 动态调度与四道门禁的 Java 生产级编排
java·开发语言
释厄62311 小时前
错误无误公理——错误正确本同源都迭代定律——逆转有价值
android·开发语言·kotlin
2601_9628857211 小时前
如何用 Python计算 CR能量指标(中间意愿指标)?
开发语言·python