`
yanfaguanli
  • 浏览: 658115 次
文章分类
社区版块
存档分类
最新评论

C# WPF 快速开发04数据绑定、列表控件

 
阅读更多

//Slider进度条与TextBox间的数据绑定。

<SliderName="m_slider"></Slider>

<TextBox Text="{Binding Value,ElementName=m_slider}"Name="m_text_main"></TextBox>

//Valuem_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绑定

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics