C# 控件之数据绑定

增加一个委托方法,可以实现后台多线程直接更新UI界面的值,利用了控件的DataBindings,以及 INotifyPropertyChanged接口和事件委托机制。

如果只是通过INotifyPropertyChanged,可在前台单独更新界面,无法通过多线程进行界面值更新。 这可以利用委托和事件的机制,在UI加入事件,通过invoke进行委托调用 ,从而可以实现 。

另外一种方法是设置窗体的CheckForIllegalCrossThreadCalls =false,但该操作方法不是微软建议使用的多线程界面更新的方法。

新建一个winform程序,然后添加两个textbox 和一个button ,写入以下代码 。

using System;
using System.ComponentModel;
using System.Threading;
using System.Windows.Forms;

namespace TestFrom
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private TestBind model = new TestBind();
        private void Form1_Load(object sender, EventArgs e)
        {
            //  CheckForIllegalCrossThreadCalls = false;
            model.NoticeHandler += new PropertyNoticeHandler(PropertyNoticeHandler);
            Binding bind1 = new Binding("Text", model, "Value");
            Binding bind2 = new Binding("Text", model, "Name");
            textBox1.DataBindings.Add(bind1);
            textBox2.DataBindings.Add(bind2);
        }

        private void PropertyNoticeHandler(object handle, string proName)
        {
            try
            {
                BeginInvoke(
                    new Action(() => model.Bind(proName)));
            }
            catch
            {
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            new Thread(() =>
            {
                while (true)
                {
                    model.Value++;
                    model.Name = Guid.NewGuid().ToString();

                    Thread.Sleep(1000);
                }
            })
            {
                IsBackground = true
            }.Start();
        }
        public event PropertyChangedEventHandler PropertyChanged;
    }

    public class TestBind : INotifyPropertyChanged
    {
        private string name;

        public string Name
        {
            get { return name; }
            set
            {
                name = value;
                SendChangeInfo("Name");
            }
        }

        private int value;

        public int Value
        {
            get { return value; }
            set
            {
                this.value = value;
                SendChangeInfo("Value");
            }
        }

        private void SendChangeInfo(string propertyName)
        {
            if (NoticeHandler != null)
            {
                NoticeHandler(this, propertyName);
            }
        }

        public void Bind(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }

        }
        public event PropertyNoticeHandler NoticeHandler;
        public event PropertyChangedEventHandler PropertyChanged;
    }

    public delegate void PropertyNoticeHandler(object handle, string proName);
}
时间: 2024-10-20 21:16:10

C# 控件之数据绑定的相关文章

(三)关于kendo IU表单form各类控件的数据绑定

=====================input textarea============================= <div id="view"> <input data-bind="value: inputValue" /> <textarea data-bind="value: textareaValue"></textarea> </div> <script&g

WinForm控件复杂数据绑定常用数据源(对Combobox,DataGridView等控件DataSource赋值的多种方法)

开始以前,先认识一下WinForm控件数据绑定的两种形式,简单数据绑定和复杂数据绑定. 1) 简单数据绑定 简单的数据绑定是将用户控件的某一个属性绑定至某一个类型实例上的某一属性.采用如下形式进行绑定:引用控件.DataBindings.Add("控件属性", 实例对象, "属性名", true); 2) 复杂数据绑定 复杂的数据绑定是将一个以列表为基础的用户控件(例如:ComboBox.ListBox.ErrorProvider.DataGridView等控件)绑

WP8.1学习系列(第二十三章)——到控件的数据绑定

在本文中 先决条件 将控件绑定到单个项目 将控件绑定到对象的集合 通过使用数据模板显示控件中的项目 添加详细信息视图 转换数据以在控件中显示 相关主题 本主题介绍了如何在使用 C++.C# 或 Visual Basic 的 Windows 应用商店应用中将控件绑定到单个项或将列表控件绑定到项目集合.此外,本主题向你介绍了如何自定义控件项目的显示.如何基于所选内容实现详细信息视图,以及如何转换数据以进行显示.有关更多详细信息,请参阅使用 XAML 进行数据绑定. 路线图: 本主题与其他主题有何关联

WinForm 控件ComboBox数据绑定

ComboBox下拉菜单控件,在数据库内的ComboBox应用的表进行修改时,如果是用的普通方法,显示数据一个方法,添加数据一个方法 这样会导致程序后期维护难度增加,在这里使用数据绑定来让ComboBox数据实现根据数据库对应表数据显示,降低数据维护难度. 1.首先将要ComboBox所需要的表的数据全部查询出来 2.对查询获得的数据用实例化泛型集合List进行接收 3.设置需要显示的列[数据] 4.设置对数据库操作需要的列[数据] 示例: public Form3() //窗体打开自动执行的数

Windows App开发之集合控件与数据绑定

为ListView和GridView添加数据 ListView采用垂直堆叠得方式显示数据,而GridView则采用水平堆叠得方式. 长相的话嘛,它们都差不多. <Grid Name="grid1" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> <ListView x:Name="listView1" SelectionChanged="

Android Studio中Spinner控件的数据绑定实现

这里介绍使用集合在程序中为Spinner控件设定数据源,步骤如下: 1.在Android Studio界面中,选择"Project",然后展开"app"->"res"->"layout",打开activity_main.xml,添加一个Spinner控件,代码如下: <Spinner android:id="@+id/eduSpinner" android:layout_width=&qu

WinForm 中 comboBox控件之数据绑定

下面介绍三种对comboBox绑定的方式,分别是泛型中List和Dictionary,还有数据集DataTable  一.List 现在我们直接创建一个List集合,然后绑定 1 List<string> liStr = new List<string>(); 2 liStr.Add("1"); 3 liStr.Add("2"); 4 liStr.Add("3"); 5 cboBindValue.DataSource =

winFormToMysql&amp;&amp;几个控件的数据绑定

运行图: 代码: 1 private void button1_Click(object sender, EventArgs e) 2 { 3 string str = "database=csharp;data source=localhost;user id=root;password=root"; 4 MySqlConnection con = new MySqlConnection(str); 5 con.Open(); 6 if (con.State == Connectio

Repeater控件实现数据绑定,并实现分页效果

前台显示代码 [csharp] view plaincopyprint? <pre name="code" class="csharp"><asp:Repeater ID="Repeater1" runat="server"> <HeaderTemplate> <table style="width: 100%; text-align: center; height: 102