01数据绑定
数据上下文
声明一个person类(为了尽量不操作空间)》在后台给person类new对象p1》给p1赋初值》把两个空间的数据上下文都设置为这个对象p1》空间中把要绑定的属性设定Text="{Binding Name}"
02INotifypropertyChange
由于普通对象没有通知我的属性变量这么一种机制,所以改变对象的属性界面不会变,但是界面改变是有textChanged之类的事件的,所以界面可以同步修改到对象。
INotifypropertyChange是net内置的接口,数据绑定会检测Datecontext是否是实现INotifypropertyChange如果实现了,就会监听PropertyChange得知属性变化
如果要求后台对象的值发生改变界面跟着变,则需要实现INotifypropertyChange接口,并且在属性值变化后触发时间。
private int age;
public int Age
{
get
{
return age;
}
set
{
this.age = value;
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("Age"));
}
}
}
如果后台对象的值不会变,则没必要实现INotifypropertyChange。
03数据上下文datacontext
//txtName.DataContext = p1;
//txtAge.DataContext = p1;
//txtheight.DataContext = p1;
//cbGender.DataContext = p1;
以上可以不一条条写出
grid1.DataContext = p1;//子控件以及所有后代控件都默认继承父控件的
txtName.DataContext = p2;//子控件可以修改
04listBox
lbPersons.ItemsSource = list;//listbox的显示集合。不是datacontext,默认是吧对象tostring来显示成一项,要是想显示某一个属性值,就要加DisplayMemberPath="Name" SelectedValuePath="Age"等来显示
<ListBox DisplayMemberPath="Name"……设置在listbox中显示的哪一个属性,如果是Age就显示年龄
object selectedItem = lbPersons.SelectedItem;//获得选中行对应的对象
bject selectedValue = lbPersons.SelectedValue;//获得选中行对应的对象的SelectedValuePath对应的属性值
05datagrid
<DataGrid.Columns>自定义列
<DataGrid Name="dg1" AutoGenerateColumns="False"……自动生成列,默认true
IsReadOnly="False" ……禁止自动编辑。
<DataGridTextColumn x:Name="colClassName"……没有Name属性的时候可以自己添加。
<DataGridTextColumn Binding=""……表示它本身绑定到哪里