Wpf的数据绑定(一)

  刚刚入职一家公司,公司是做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













评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值