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; }
    }
}
相关推荐
雨落倾城夏未凉5 天前
第四章c#方法-参数数组和可选参数(16)
后端·c#
唐青枫6 天前
线程不是越多越快:C#.NET Thread 生命周期、同步与后台工作线程实战
c#·.net
唐青枫7 天前
别只会反射:C#.NET Emit 动态生成代码实战详解
c#·.net
咕白m6257 天前
.NET 环境下 Word 超链接批量提取方案
c#·.net
用户91721561902117 天前
C# 通信协议增量解析:用状态机处理半包和粘包
c#
小码编匠8 天前
C# 工控上位机必备:数据转换工具类与十个核心模块
后端·c#·.net
唐青枫10 天前
别再乱用 StartNew:C#.NET TaskFactory 任务调度实战详解
c#·.net
Artech10 天前
[MAF预定义的AIContextProvider-03]ChatHistoryMemoryProvider——赋予Agent从经验中学习的能力
ai·c#·agent·memory·maf
Scout-leaf12 天前
C#摸鱼实录——IoC与DI案例详解
c#
咕白m62512 天前
使用 C# 在 Excel 中应用多种字体样式
后端·c#