//此为第三次重改结果
//第一次,常规绑定,即直接绑定_binSource数据源,即: Pic.DataBindings.Add(new Binding("Image", bdSource, _Field);
//问题:数据无法同步刷新,前台控件的数据值无法同步写入绑定值内
//第二次,添加第四/第五参数,即 true, DataSourceUpdateMode.OnPropertyChanged;
//问题:前台控件数据更新正常,但手动修改值时,不能写入绑定值内,原因为前台控件操作会激活焦点失去事件,而此事件将激活绑定事件,但手动修改则不会激活
//以上内容在Dev15的控件中不存在此类情况.我是纯找虐型....
//第一次,常规绑定,即直接绑定_binSource数据源,即: Pic.DataBindings.Add(new Binding("Image", bdSource, _Field);
//问题:数据无法同步刷新,前台控件的数据值无法同步写入绑定值内
//第二次,添加第四/第五参数,即 true, DataSourceUpdateMode.OnPropertyChanged;
//问题:前台控件数据更新正常,但手动修改值时,不能写入绑定值内,原因为前台控件操作会激活焦点失去事件,而此事件将激活绑定事件,但手动修改则不会激活
//以上内容在Dev15的控件中不存在此类情况.我是纯找虐型....
绑定方法:
private BindingSource bdSource = new BindingSource();//此设计将解决外部赋值无法刷新绑定值的问题
//先用 BindingSource 承接外部数据源
bdSource.DataSource = _binSource;
//2.清除原控件绑定内容
Pic.DataBindings.Clear();
//3.添加控件的绑定,而非直接的数据源绑定
//3.添加控件的绑定,而非直接的数据源绑定
Pic.DataBindings.Add(new Binding("Image", bdSource, _Field, true, DataSourceUpdateMode.OnPropertyChanged));
//手动赋值时:
//手动赋值时:
public void SetValue(object value)
{
Pic.Image = (Image)value;
bdSource.EndEdit();//此行不可少,赋值后必须加endedit才会更新对应的绑定值
}
bdSource.EndEdit();//此行不可少,赋值后必须加endedit才会更新对应的绑定值
}
//第三次BUG,多控件绑定时,会判断DBNULL的情况
//此为引用自http://blog.csdn.net/jjhua/article/details/24326171 解决方法
using System.ComponentModel;
public class Test : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
double a;
double b;
public double A {
get { return this.a; }
set
{
if (value != this.a)
{
this.a = value;
this.RaisePropertyChanged("A");
}
}
}
public double B { get; set; }
private void RaisePropertyChanged(string propertyName)
{
var handler = this.PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}
//此BUG最终解决方案及架构中的特殊解决办法:
//一,主控件中绑定方法
bdSource.DataSource = _binSource;
dEdit.DataBindings.Clear();
//第四个参数为强制格式转换开启
dEdit.DataBindings.Add("ValueX", bdSource, _Field, true, DataSourceUpdateMode.OnPropertyChanged);
//二.子控件中引用接口INotifyPropertyChanged
public DateTime? ValueX
{
get { return valueX; }
set
{
if (value == null)
{
valueX = value;
SetNullText();
}
else
{
this.CustomFormat = FormatString;
this.Value = value.Value;
valueX = value;
}
//this.OnValueChanged(null); //调用此事件无效 待查验
//return;
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("valueX"));
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
第N次解决方案结果示例:[PropertyChanged方法需绑定的值为当前控件属性,子控件无法处理,只适用于继承控件]
Pic.DataBindings["Image"].WriteValue();
来源:http://www.cnblogs.com/jdmei520/archive/2009/02/23/1396658.html
//此为引用自http://blog.csdn.net/jjhua/article/details/24326171 解决方法
using System.ComponentModel;
public class Test : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
double a;
double b;
public double A {
get { return this.a; }
set
{
if (value != this.a)
{
this.a = value;
this.RaisePropertyChanged("A");
}
}
}
public double B { get; set; }
private void RaisePropertyChanged(string propertyName)
{
var handler = this.PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}
//此BUG最终解决方案及架构中的特殊解决办法:
//一,主控件中绑定方法
bdSource.DataSource = _binSource;
dEdit.DataBindings.Clear();
//第四个参数为强制格式转换开启
dEdit.DataBindings.Add("ValueX", bdSource, _Field, true, DataSourceUpdateMode.OnPropertyChanged);
//二.子控件中引用接口INotifyPropertyChanged
public DateTime? ValueX
{
get { return valueX; }
set
{
if (value == null)
{
valueX = value;
SetNullText();
}
else
{
this.CustomFormat = FormatString;
this.Value = value.Value;
valueX = value;
}
//this.OnValueChanged(null); //调用此事件无效 待查验
//return;
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("valueX"));
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
第N次解决方案结果示例:[PropertyChanged方法需绑定的值为当前控件属性,子控件无法处理,只适用于继承控件]
Pic.DataBindings["Image"].WriteValue();
来源:http://www.cnblogs.com/jdmei520/archive/2009/02/23/1396658.html