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);
}
C# 控件之数据绑定的更多相关文章
- asp.net学习之 数据绑定控件--List数据绑定控件
原文:asp.net学习之 数据绑定控件--List数据绑定控件 List控件(如 CheckBoxList.DropDownList.ListBox 和 RadioButtonList 类)继承自L ...
- [C#]WinForm 中 comboBox控件之数据绑定
[C#]WinForm 中 comboBox控件之数据绑定 一.IList 现在我们直接创建一个List集合,然后绑定 IList<string> list = new List<s ...
- WPF Label控件在数据绑定Content属性变化触发TargetUpdated事件简单实现类似TextChanged 事件效果
原文:WPF Label控件在数据绑定Content属性变化触发TargetUpdated事件简单实现类似TextChanged 事件效果 本以为Label也有TextChanged 事件,但在使 ...
- WPF 实现跑马灯效果的Label控件,数据绑定方式实现
原文:WPF 实现跑马灯效果的Label控件,数据绑定方式实现 项目中需要使用数据绑定的方式实现跑马灯效果的Label,故重构了Label控件:具体代码如下 using System; using S ...
- WinForm控件复杂数据绑定常用数据源(对Combobox,DataGridView等控件DataSource赋值的多种方法)
开始以前,先认识一下WinForm控件数据绑定的两种形式,简单数据绑定和复杂数据绑定. 1) 简单数据绑定 简单的数据绑定是将用户控件的某一个属性绑定至某一个类型实例上的某一属性.采用如下形式进行绑定 ...
- WP8.1学习系列(第二十三章)——到控件的数据绑定
在本文中 先决条件 将控件绑定到单个项目 将控件绑定到对象的集合 通过使用数据模板显示控件中的项目 添加详细信息视图 转换数据以在控件中显示 相关主题 本主题介绍了如何在使用 C++.C# 或 Vis ...
- Windows App开发之集合控件与数据绑定
为ListView和GridView加入数据 ListView採用垂直堆叠得方式显示数据.而GridView则採用水平堆叠得方式. 长相的话嘛,它们都几乎相同. <Grid Name=" ...
- 《ASP.NET1200例》嵌套在DataLisT控件中的其他服务器控件---DropDownList控件的数据绑定
aspx <script type="text/javascript"> function CheckAll(Obj) { var AllObj = document. ...
- Repeater控件实现数据绑定,并实现分页效果
前台显示代码 <pre name="code" class="csharp"><asp:Repeater ID="Repeater1 ...
随机推荐
- python从零开始 -- 第2篇之python版本差异
python从零开始 -- 第2篇之python版本差异 第0篇开始,咱们就说选择 python 3.x,一般来说,咱们面临选择的时候总是想了解更多一点,并且版本之间的对比能引申出很多有意思的故事和知 ...
- python 启动shell报错 Subprocess Startup Error
如图所示启动python的IDLE以后,按F5启动module或者启动shell的时候就会启动失败提示上面错误,刚开始百度知道解决方案不靠谱,最后找到原因是我之前看小甲鱼的教学视频时,新建了一个pic ...
- contos7搭建syslog服务端与客户端
搭建中心服务端1,编辑文件/etc/rsyslog.conf,找到以下内容,将前面的#注释符合去除#$ModLoad imtcp#$InputTCPServerRun 514 2,在/etc/rsys ...
- python中shutil模块的使用
可以操作权限的处理文件模块:shutil # 基于路径的文件复制 import shutil shutil.copyfile("oldfile_path","newfil ...
- 记录一次axios请求造成的数组初始化失败
axios请求是一个异步的请求,简单来讲就是在做其他事情的时候可以把这个先放一边等其他的事情做完后再来做这件事件. 我之前这样调用了一个方法: mounted() { this.first() thi ...
- 安利一个十分实用的IDEA插件--RestfulToolkit
官网链接:http://plugins.jetbrains.com/plugin/10292-restfultoolkit,英汉双语的帮助文档. 一套 RESTful 服务开发辅助工具集. 1.根据 ...
- LeetCode 922. Sort Array By Parity II C++ 解题报告
922. Sort Array By Parity II 题目描述 Given an array A of non-negative integers, half of the integers in ...
- P2257 莫比乌斯+整除分块
#include<bits/stdc++.h> #define ll long long using namespace std; ; int vis[maxn]; int mu[maxn ...
- usg6000
USG6000密码恢复 1.如果某个管理员遗忘了密码,可以使用其它高权限的管理员账号登录设备,然后修改密码.例如,管理员admin1的密码遗忘,此时可以由管理员admin登录设备,然后修改admin1 ...
- TensorFlow:检查显卡支持哪个版本的CUDA
最近想学习TensorFlow深度学习编程,然后就开始查这方面的信息. 第0步是安装环境,配置环境. 首先到TensorFlow的官网查看在Windows上安装的条件和步骤. 可以仅仅安装CPU版本的 ...