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; }
    }
}
相关推荐
JaydenAI6 分钟前
[MAF预定义的AIContextProvider-10]TodoProvider——用TodoList驱动Agent的任务执行
ai·c#·agent·maf
程序员皮皮林12 分钟前
Dubbo 的 SPI 和 JDK 的 SPI 有什么区别?
java·开发语言·dubbo
是多巴胺不是尼古丁15 分钟前
java‘期末复习--多态
java·开发语言
abcy07121328 分钟前
sqlalchemy 原生sql判断条件是否为空,为空则跳过
开发语言·python
.千余33 分钟前
【C++】深挖STL list底层:解迭代器与节点存储逻辑
开发语言·c++·笔记·学习·其他
淡水瑜35 分钟前
C# 实操
开发语言·c#
雪落漂泊36 分钟前
C++ 继承与多态(上)
开发语言·c++
skywalk816337 分钟前
我想基于kotti-py312 ,制作一个多中文编程语言的宣传网站,主要包括文档、playground 示例和学习 (Codearts制作)
开发语言·学习·编程
聆风吟º41 分钟前
【C++11新章】列表初始化详解
开发语言·c++·列表初始化
Fms_Sa42 分钟前
贪心算法-背包问题
算法·贪心算法·c#