稍稍增加一点难度,我们让记录列表中嵌入一组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,如需转载请自行联系原作者