稍稍增加一点难度,我们让记录列表中嵌入一组CheckBox,以便用户选择,之后,用户就可以编辑或者删除所选择的记录了。其效果如下:
这里,我们使用一个DataTemplate来容纳CheckBox控件。注意,公布的源代码中,使用的是Click事件,但使用这个事件可能会导致一些小Bug,所以现在改成了Checked和Unchecked。
为了实现绑定数据,我们可以在GridView控件的GridViewColumn中加入DisplayMemberBinding="{Binding Path=FunctionName}"这样的属性。
下面的翻页控件是一个自定义的UserControl。关于UserControl的编写,将在后续文章中介绍。
后台代码如下:
我们用一个_SelectedItems变量保存已选择的对象,避免遍历循环控件去判断哪些被选中了。
这里有多个事件中加入了if (this.grdGrid.IsInRow() == false) return;这样的语句,这是因为在很少的情况下,如果鼠标正好处在两行之间的微小空隙中,系统会认为选中了整个Grid,所以我们需要做一些判断。其中IsInRow是一个扩展方法,将在下一篇文章中介绍。另外,GetControl也是一个扩展方法,用于找到模板列中的控件,将在下一篇文章中介绍。
这里,我们使用一个DataTemplate来容纳CheckBox控件。注意,公布的源代码中,使用的是Click事件,但使用这个事件可能会导致一些小Bug,所以现在改成了Checked和Unchecked。
为了实现绑定数据,我们可以在GridView控件的GridViewColumn中加入DisplayMemberBinding="{Binding Path=FunctionName}"这样的属性。
下面的翻页控件是一个自定义的UserControl。关于UserControl的编写,将在后续文章中介绍。
1
<
Page.Resources
>
2
<
DataTemplate
x
:
Key
="CheckBox">
3
<
CheckBox
Name
="chkSelect"
Checked
="chkSelect_Checked"
Unchecked
="chkSelect_Unchecked" />
4
</
DataTemplate
>
5
</
Page.Resources
>
6
<
Grid
VerticalAlignment
="Top">
7
<
ListView
Name
="grdGrid"
Margin
="4,86,0,24"
MinHeight
="155"
MouseDoubleClick
="grdGrid_MouseDoubleClick"
ItemsSource
="{
Binding
}">
8
<
ListView.View
>
9
<
GridView
>
10
<
GridViewColumn
CellTemplate
="{
StaticResource
CheckBox
}"
Width
="25" />
11
<
GridViewColumn
Header
="Function Name"
DisplayMemberBinding
="{
Binding
Path
=FunctionName}"
Width
="200" />
12
<
GridViewColumn
Header
="Function Description"
DisplayMemberBinding
="{
Binding
Path
=FunctionDescription}"
Width
="525" />
13
</
GridView
>
14
</
ListView.View
>
15
</
ListView
>
16
<
common
:
Pager
Name
="ctlPager"
PageChanged
="ctlPager_PageChanged"
Height
="22"
VerticalAlignment
="Bottom"
HorizontalAlignment
="Right" />
17
</
Grid
>
我们用一个_SelectedItems变量保存已选择的对象,避免遍历循环控件去判断哪些被选中了。
这里有多个事件中加入了if (this.grdGrid.IsInRow() == false) return;这样的语句,这是因为在很少的情况下,如果鼠标正好处在两行之间的微小空隙中,系统会认为选中了整个Grid,所以我们需要做一些判断。其中IsInRow是一个扩展方法,将在下一篇文章中介绍。另外,GetControl也是一个扩展方法,用于找到模板列中的控件,将在下一篇文章中介绍。
1
private
ArrayList _SelectedItems =
new
ArrayList();
2
3
private
void chkSelect_Checked(
object sender,
RoutedEventArgs e)
4 {
5
try
6 {
7
if (
this.grdGrid.IsInRow() ==
false)
return;
8
9
this.SetEnabled((
CheckBox)sender, ((
FunctionInfo)
this.grdGrid.GetItem()).FunctionId);
10
11 e.Handled =
false;
12 }
13
catch
14 {
15
throw;
16 }
17 }
18
19
private
void chkSelect_Unchecked(
object sender,
RoutedEventArgs e)
20 {
21
try
22 {
23
if (
this.grdGrid.IsInRow() ==
false)
return;
24
25
this.SetEnabled((
CheckBox)sender, ((
FunctionInfo)
this.grdGrid.GetItem()).FunctionId);
26
27 e.Handled =
false;
28 }
29
catch
30 {
31
throw;
32 }
33 }
34
35
private
void grdGrid_MouseDoubleClick(
object sender,
MouseButtonEventArgs e)
36 {
37
try
38 {
39
if (
this.grdGrid.IsInRow() ==
false)
return;
40
41
CheckBox control = (
CheckBox)
this.grdGrid.GetControl(
"chkSelect");
42
43 control.IsChecked = (control.IsChecked ==
false);
44 }
45
catch
46 {
47
throw;
48 }
49 }
50
51
private
void SetEnabled(
CheckBox control,
object value)
52 {
53
try
54 {
55
if (control.IsChecked ==
true)
this._SelectedItems.Add(value);
56
if (control.IsChecked !=
true)
this._SelectedItems.Remove(value);
57 }
58
catch
59 {
60
throw;
61 }
本文转自 Eallies 51CTO博客,原文链接:http://blog.51cto.com/eallies/79023,如需转载请自行联系原作者