Wpf的数据绑定(一)

来源:互联网 发布:多线程编程java 方法 编辑:程序博客网 时间:2024/06/06 01:27

  刚刚入职一家公司,公司是做WPF开发的,之前一直做Web从没有接触过WPF。最近在看公司源码,因为项目中用了很多数据绑定(<img alt="再见" src="http://static.blog.csdn.net/xheditor/xheditor_emot/default/bye.gif" /><span style="color: rgb(255, 0, 0); background-color: rgb(255, 255, 255); ">比起其他奇怪的框架,我只看得懂那是数据绑定~_~ 所以我就从数据绑定学起</span>)

  这一次先讲以下2个,就拿textbox做示范

  1.textbox绑定一次性后台固定数据 

  2.textbox绑定后台数据实现数据更新,textbox更新


  1.一次性绑定数据

   xmal代码:

      <Grid>
        <TextBox Text="{Binding MyName}"></TextBox>
      </Grid> 

  没错 它就只有一个textbox  在Text里绑定了一个后台的属性

  后台代码:

   private string _name;
        public string MyName { get { return _name; } set { _name = value; } }
        public DataBind()
        {
            this.DataContext = this;//这句是关键
            _name = "123";
            InitializeComponent();
        }

 运行结果:

  

 一个很简单了小例子

2.交互更新:

  xmal代码:

<pre name="code" class="plain">    <Grid>        <Grid.RowDefinitions>            <RowDefinition></RowDefinition>            <RowDefinition></RowDefinition>        </Grid.RowDefinitions>        <TextBox Text="{Binding MyName}" Grid.Row="0"></TextBox>        <Button Click="Button_Click" Content="数据变化" Grid.Row="1"></Button>    </Grid>

放置了一个textbox和一个btn

 后台代码:

public partial class DataBind : Window,INotifyPropertyChanged    {        private string _name;        public string MyName { get { return _name; } set { _name = value;            OnPropertyChanged("MyName");        } }        public DataBind()        {            this.DataContext = this;            _name = "123";            InitializeComponent();        }        private void Button_Click(object sender, RoutedEventArgs e)        {            MyName =(int.Parse(MyName)+1).ToString();        }        public event PropertyChangedEventHandler PropertyChanged;        public virtual void OnPropertyChanged(string propertyName)        {            if (PropertyChanged != null)            {                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));            }        }            }

初始状态



单击按钮之后


下面我们来具体分析一下实现原理

 首先是INotifyPropertyChanged接口

INotifyPropertyChanged 接口用于向客户端(通常是执行绑定的客户端)发出某一属性值已更改的通知。

例如,考虑一个带有名为FirstName 属性的 Person 对象。若要提供一般性属性更改通知,则Person 类型实现 INotifyPropertyChanged 接口并在FirstName 更改时引发 PropertyChanged 事件。

若要在将客户端与数据源进行绑定时发出更改通知,则绑定类型应具有下列任一功能:

  • 实现INotifyPropertyChanged 接口(首选)。

  • 为绑定类型的每个属性提供更改事件。

上述这两个功能不要同时实现。

(源自msdn)


提供一些关于接口的链接:http://www.cnblogs.com/beginor/archive/2012/08/13/2636418.html













0 0
原创粉丝点击