WinForm的绑定,例如绑定DataTable 就已经能够实现 界面和数据的双向连动,即改数据源,界面也会相应的发生变化,改界面上数据源也会发生相应的变化..
反观WPF 为了实现双向连动,需要实现 INotifyPropertyChanged,这样的好处是什么?
1、WinForm的绑定,例如绑定DataTable 就已经能够实现 界面和数据的双向连动,即改数据源,界面也会相应的发生变化,改界面上数据源也会发生相应的变化..
WPF 也可以直接绑定 DataTable,也能实现你上面所述的效果,不用实现 INotifyPropertyChanged ,因为这是集合类型。
2、WinForm 中当需要双向绑定属性时也需要实现 INotifyPropertyChanged 接口来支持双向绑定,比如绑定 TextBox。
class Rabbit_Yi_ViewModel : INotifyPropertyChanged
{
private string _text;
public string Text {get{return _text;} set{ if(_text != value){ _text = value;this.OnPropertyChanged("Text");}}};
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName) { if (this.PropertyChanged != null) this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); }
}
BindingSource bs = new BindingSource();
Rabbit_Yi_ViewModel vm = new Rabbit_Yi_ViewModel;
bs.DataSource = typeof(Rabbit_Yi_ViewModel);
this.textBox1.DataBindings.Add(new Binding("Text",vm,"Text",true,DataSourceUpdateMode.OnPropertyChanged);
是的。。grid绑定DataTable 我们项目之前有做过双向绑定的。。能达到效果的
@Rabbit_Yi: 那你还有什么问题吗?
我记得不太一样,买本书好好看看吧
肯定不太一样啊。关键是我想知道为什么 WPF搞一套 Binding 这么麻烦,比以前WinForm的还麻烦,这样真的好吗?
winform只是部分控件有这样的特性吧。wpf是只要实现了这个接口的都具有该特性。
是的,但如果将winform的其它控件也做成这样的特性,不就更简单了吗?(DataTable 具有这样的特性,绑定文本框下拉框,Grid 都是可以实现双向连动的)
因为控件就那么些,但业务对象可是有很多个的? 这样是不是反而增加了工作量呢,他这个有什么特殊的吗?
@Rabbit_Yi: 为什么就需要双向绑定呢?需要再用,这是原则。而且,winform那个年代,双向绑定也不流行。
@幻天芒: 貌似你滑懂我的意思。。我是在做比较。。
@Rabbit_Yi: 好吧,Launcher 大神的答案很犀利。
NET 2.0之前,是松绑定
之后才开始出现INotifyPropertyChanged,也就是说是编程技术发展的需要。
你说的Winform绑定DataTable的事实是假的,
WinForm的绑定,例如绑定DataTable 就已经能够实现 界面和数据的双向连动,即改数据源,界面也会相应的发生变化,改界面上数据源也会发生相应的变化.
这是错误的描述,经常使用Winform编程的,在这上面已经掉进坑里好几回的应该。
据我所知,你说的事情正好相反,修改Datatable,界面上的数据并不会跟着变化。
而修改界面,DataTable是会跟着变化的。
这就是单向绑定。。。
如果你也曾经被Bindingsource坑过的话,你就会知道WPF里面实现INotifyPropertyChanged接口有什么好处了。
对,改了Grid,你要做一些动做才能到数据更新到Datable,就是你说的BingingSource 。。也能实现需求的