//Slider进度条与TextBox间的数据绑定。
<SliderName="m_slider"></Slider>
<TextBox Text="{Binding Value,ElementName=m_slider}"Name="m_text_main"></TextBox>
//Value是m_slider的一个属性值
//数据绑定的类。C#类的添加:右键点击解决方案--添加--类;
1.创建一个类
class MyClass
{
public string name
{
get;
set;
}
public string age
{
get;
set;
}
}
2.给要绑定的控件设定DataContext
MyClass m_me = new MyClass();//创建类并初始数据
privatevoid Window_Loaded(objectsender, RoutedEventArgs e)
{
m_me.name = "乡巴佬";
m_me.age = 23;
m_txtName.DataContext = m_me;//让控件变量绑定类
m_txtAge.DataContext = m_me;
//上面两行代码可以用this.DataContext=m_me;代替。因为this指主窗口,<Grid>标签在里面,而这些控件在<Grid>里面,所以这样可以快速使某个标签里的所有控件快速绑定。另外,后面是还可以再绑定为另外的对象的,比如this.DataContext=m_me;m_txtAge.DataContext = m_her;(PS:this可以用标签名替换)
}
3.控件绑定类的某成员变量
<TextBox Name="m_txtName" Text="{Binding name}"></TextBox>
<TextBox Name="m_txtAge" Text="{Binding age}"></TextBox>
//m_txtName是控件变量名称,name是第2步绑定的类的成员变量
//Binding name,UpdateSourceTrigger=PropertyChanged表改变界面项的值后同步修改数据源的值?然后在控件RowEditEnding时间中e.Row.DataContext获得修改后对象
效果如上,程序加载时就给类成员赋值,控件就间接接收并显示了。
//以上只能实现界面数据改变,后台类对象的成员值跟着改变。若在后台代码出修改类对象成员的值,与之绑定的控件的界面值是不会更新的。
//要实现双向数据通讯,还要让类实现INotifyPropertyChanged接口。
classMyClass:INotifyPropertyChanged//同样,此次要选择INotifyPropertyChanged,右键,解析得到命名空间,但还要增多一步:选择INotifyPropertyChanged,右键,实现接口。
{
privateint_age;
publicstringname
{
get;//这些是简写模式
set;
}
publicintage
{
get
{
return_age;
}
set
{
this._age=value;//value转到定义,?其实就是publicintage//这里暂时不知道这种机制
if(PropertyChanged!=null)//如果没有点击实现接口,就没有PropertyChanged这个成员
{
PropertyChanged(this,newPropertyChangedEventArgs("age"));//表明age属性发生了改变
}
}
}
publiceventPropertyChangedEventHandlerPropertyChanged;//自动产生的
}
//后面写个按钮,让m_me.age++就能看到效果了。下面是教程的板书
//ListBox
<ListBox>
<ListBoxItemContent="1"></ListBoxItem>
<ListBoxItemContent="2"></ListBoxItem>
</ListBox>
//上面的代码可以用下面的代码表示
MyClassm_me=newMyClass();
privatevoidWindow_Loaded(objectsender,RoutedEventArgse)
{
m_me.name="乡巴佬";
m_me.age=23;
List<MyClass>m_list=newList<MyClass>();
m_list.Add(m_me);//把类对象加进去
m_lbName.ItemsSource=m_list;//ListBox标签“绑定该类”
}
//这样ListBox就可以显示该类对象了,但要显示该对象的哪个成员,还需在标签设置DisplayMemberPath
<ListBoxName="m_lbName"DisplayMemberPath="name"SelectedValuePath="age"></ListBox>
//而SelectedValuePath则是为了获取选中项对应的类对象的某成员值。
privatevoidm_getAge_Click(objectsender,RoutedEventArgse)
{
objectm_age=m_lbName.SelectedValue;//注意这里是SelectedValue而标签处是SelectedValuePath
objectm_all=m_lbName.SelectedItem;//获取整个类对象,调试断点运行看看。
}
==============================================================
//DataGrid
首先创建一个类
classCClass
{
publicstringname//姓名
{get;set;}
publicboolisgirl//是否女生
{get;set;}
publicstringinclass//所在班级
{get;set;}
}
创建一个<DataGrid>标签后,先看看后台代码
privatevoidWindow_Loaded(objectsender,RoutedEventArgse)
{
//创建一个List供名称为m_dg_class的<DataGrid>控件绑定
List<CClass>m_lClass=newList<CClass>();
m_lClass.Add(newCClass{name="乡巴佬",isgirl=false,inclass="一班"});
m_lClass.Add(newCClass{name="乡下妹",isgirl=true,inclass="二班"});
m_lClass.Add(newCClass{name="乡下狗",isgirl=false,inclass="X班"});
m_dg_class.ItemsSource=m_lClass;
//<DataGrid>可以显示Combo控件,使用方法与常规不同,需新增一个List,注意新增的List没“X班”,用来测试的……
List<string>inclass=newList<string>();
inclass.Add("一班");
inclass.Add("二班");
m_dg_combo_class.ItemsSource=inclass;
}
看看界面代码
<DataGridName="m_dg_class"AutoGenerateColumns="False"CanUserAddRows="False"><DataGrid.Columns>
<DataGridTextColumnBinding="{Bindingname}"Header="姓名"></DataGridTextColumn>
<DataGridCheckBoxColumnBinding="{Bindingisgirl}"Header="是否女生"></DataGridCheckBoxColumn>
<DataGridComboBoxColumnx:Name="m_dg_combo_class"SelectedItemBinding="{Bindinginclass}"></DataGridComboBoxColumn>
</DataGrid.Columns>
</DataGrid>
//AutoGenerateColumns:自动设置。CanUserAddRows用户可以自己增加行。
//DisplayMemberPath=”Name”表显示哪个变量的值,SelectedVauluPath=”Id”表获取以“”为条件的数据。SelectdeValuBingding绑定