刚刚入职一家公司,公司是做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 接口(首选)。
-
为绑定类型的每个属性提供更改事件。
上述这两个功能不要同时实现。
提供一些关于接口的链接:http://www.cnblogs.com/beginor/archive/2012/08/13/2636418.html