在Canvas上根据变量改变Shape的位置
abel
Name="lblX"
Content="{Binding Path=RectX}" />
由于Label的Content默认就是 OneWay的,这里就没有显式指定。 接着,两个ScrollBar。跟TextBox相似,也是做了双向绑定。不过ScrollBar的Value不用显式指定UpdateSourceTrigger也行。 Xml代码 <ScrollBar Name="scbX" Value="{Binding Path=RectX, Mode=TwoWay}" /> 最后是Canvas里的 Rectangle。与Label类似,对RectX和RectY做了单向绑定,分别绑定到Canvas.Left和Canvas.Top这两个附加属性上。 Xml代码 <Rectangle Canvas.Left="{Binding Path=RectX}" Canvas.Top="{Binding Path=RectY}"/> OK,到这里为止都是在XAML 里设置数据绑定的目标。那数据源的一侧要如何实现呢?关键问题是,当数据源的值发生了变化,应该如何通知数据绑定的目标? (不是特别推荐的方法)通过实现INotifyPropertyChanged接口来实现数据源 WPF能理解INotifyPropertyChanged接口,通过其PropertyChanged事件来得到数据源更新的通知。 C#代码 using System.ComponentModel; using System.Windows; namespace TestWpfCanvasShapeDataBinding { /// <summary> /// Interaction logic for Window1.xaml /// </summary> public partial class Window1 : Window, INotifyPropertyChanged { private int _rectX; private int _rectY; public int RectX { get { return _rectX; } set { _rectX = value; OnPropertyChanged( "RectX" ); } } public int RectY { get { return _rectY; } set { _rectY = value; OnPropertyChanged( "RectY" ); } } public Window1( ) { InitializeComponent( ); this.DataContext = this; } private void button1_Click( object sender, RoutedEventArgs e ) { MessageBox.Show( this.RectX.ToString( ) ); } private void button2_Click( object sender, RoutedEventArgs e ) { MessageBox.Show( this.RectY.ToString( ) ); } #region INotifyPropertyChanged Members public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged( string propertyName ) { var handler = PropertyChanged; if ( null != handler ) { handler( this, new PropertyChangedEventArgs( propertyName ) ); } } #endregion } } 实现要点是: 1、实现INotifyPropertyChanged接口,并声明其成员 PropertyChanged事件; 2、定义一个OnPropertyChanged()方法来发送上述事件;不一定要叫 OnPropertyChanged,这只是习惯; 3、在需要通知更新的属性的setter里调用 OnPropertyChanged()。 这种做法在WinForms里应该很常见,因为WinForms的数据绑定支持实在 算不上好。WPF里有更方便更强大的支持,也就是DependencyProperty。 通过 DependencyProperty来实现数据源 DependencyProperty的内部实现机制描述起来觉得好复杂。 我也没理解透彻。所以这里就不多说了,详细还是找本WPF的书来看吧。 自己需要写的代码方面 则很简单,如下: Window1.xaml.cs C#代码 using System.Windows; namespace TestWpfCa |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |