C# WinForms DataBindings绑定布尔值属性时,反向转值的问题

一般我们要绑定个按钮的状态Enabled属性时,有可能刚好是取对应的反值,比如我绑定的是线程里一个bool的IsRunning,

一般添加代码的方式为

button1.DataBindings.Add("Enabled", OrderViewModel.Instance.Commands.ThreadManager,"IsRunning", false, DataSourceUpdateMode.OnPropertyChanged);

但实际使用场景是线程运行是,按钮为灰色,显然这种方式不符合

wpf下的这处场景还有值转换器可以利用,但winform下这种转换让我浪费了一下行,最后代码如下,更精简明了

var bind = new Binding("Enabled", OrderViewModel.Instance.Commands.ThreadManager, "IsRunning");
            bind.Format += delegate(object o, ConvertEventArgs args) { args.Value = !((bool) args.Value); };
            button1.DataBindings.Add(bind);
时间: 2024-10-11 20:30:54

C# WinForms DataBindings绑定布尔值属性时,反向转值的问题的相关文章

boolean attribute(布尔值属性) attribute vs property

boolean attribute(布尔值属性) boolean attribute     HTML - Why boolean attributes do not have boolean value?     Boolean HTML Attributes   HTML Boolean Attributes A number of attributes are boolean attributes. The presence of a boolean attribute on an ele

TextView在xml文件中加入onClick属性后,clickable值依旧是false的原因。

先看View中是如何定义clickable和onClick的: case com.android.internal.R.styleable.View_clickable: if (a.getBoolean(attr, false)) { viewFlagValues |= CLICKABLE; viewFlagMasks |= CLICKABLE; } break; 上面这段代码是View源码中对clickable属性的定义,缺省值为false. case R.styleable.View_on

block作为类的属性时用copy

1. block作为类的属性时用copy Block属性的声明,首先需要用copy修饰符,因为只有copy后的Block才会在堆中,栈中的Block的生命周期是和栈绑定的 <栈 :由系统维护的局部变量 是存在栈上的,其生命周期随函数的生命周期> <堆 :由程序员申请空间地址,由程序员手动释放,生命周期受到程序员控制> 使用retain也可以,因为block的retain行为默认是用copy的行为实现的,block变量默认是声明为栈变量的,为了能够在block的声明域外使用,所以要把

一个类在另一个类中以集合形式声明为属性时应该注意的问题

标题:一个类在另一个类中以集合形式声明为属性时应该注意的问题,先解释一下,看下面的代码吧 [Serializable] public class MO_T_sj_quest { public List<MO_T_sj_answer> AnswerList { get; set; } public List<MO_T_sj_answer> IDList { get; set; } public List<MO_T_sj_quest_bind> BindList { get

关于blob转到目标库报ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值错误解决方案

在数据抽取时,开发需要clob类型的数据,但是目标库类型是blob类型的,于是抽取的时候报错: ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值错误 可能有以下几种原因: 可能有以下几种原因: 1.插入到字符串长度大于4000字节. 2.插入到表中的记录的某个字段数据的实际长度大于2000个字节(如果是UTF-8,则是1333个字节):或者是插入的记录中有两个或两个以上长度大于2000字节的字符串. 3.数据库与客户端的JDBC 驱动不匹配.对于UTF-8或欧洲的某些字符集,o

jeecg bootstrap框架 构造下拉列表,当选中的值改变时,自动填充其关联控件的值

构造下拉列表:方法之一:使用控件  <t:dictSelect> 对数据库中对应的表进行绑定 1 <div class="bt-item col-md-6 col-sm-6"> 2 <div class="row"> 3 <div class="col-md-3 col-sm-3 col-xs-3 bt-label"> 4 id: 5 </div> 6 <div class=&qu

Ajax详解及使用Ajax时的返回值类型有哪些?

Ajax详解 Ajax = 异步 JavaScript 和 XML. Ajax 是一种用于创建快速动态网页的技术. 通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新.这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新. 传统的网页(不使用 Ajax)如果需要更新内容,必需重载整个网页面. (注:图片来自网络) 如何使用Ajax技术 首先,需要获取XMLHttpRequest对象: var xhr; xhr = new XMLHttpRequest(); XMLH

JS-窗体对象 与 事件返回值属性

窗体对象 //窗体的加载事件 () window.onload=function(){} //当整个页面加载完毕以后再执行窗体加载事件 //窗体的卸载事件 window.onunload=function(){} //当前窗体加载其他页面时,当前页面会被卸载触发onunload //窗体的获得焦点事件 window.onfocus=function(){} //从其他页面跳转到当前页面会触发onfocus事件 //窗体的失去焦点事件 window.onblur=function(){} //从当

一个整数,大于0,不用循环和本地变量,按照 n, 2n, 4n, 8n 的顺序递增,当值大于5000 时,把值按照指定顺序输出来。

1 package sfbc; 2 /** 3 * 一个整数,大于0,不用循环和本地变量,按照 n, 2n, 4n, 8n 的顺序递增,当值大于5000 4 时,把值按照指定顺序输出来. 5 例: n=1237 6 则输出为: 7 1237, 8 2474, 9 4948, 10 9896, 11 9896, 12 4948, 13 2474, 14 1237, 15 提示:写程序时,先致谢按递增方式的代码,写好递增的以后,再增加考虑递减部分. 16 * @author trfizeng 17