2009-02-14 78 views
2

有没有可能有一个绑定的DataGridCheckBoxColumn调用点击方法?或事件行级别或行输入事件?Silverlight DataGrid复选框事件?

我想实现一个DataGrid,更新底层过滤的ObservableCollection集合(大sameple这里http://petermcg.wordpress.com/2009/01/29/filtering-silverlight-datagrid-rows/

如果我按更新按钮或其他方法之外的过滤工作正常。但是,我似乎无法找到DataGridCheckBoxColumn中的任何内部网格事件或任何内容,这些内容将允许我调用更新过滤器逻辑。

关于如何实现一个数据网格,在按下复选框时更新底层集合的任何建议?

请在下面找到我的Xaml,它确实没有什么特别之处。



回答

11

DataGridCheckBoxColumn类型目前不提供Click事件,实际上它目前不提供任何事件。在此类型的列中呈现的单元格仅实现了CheckBox控件的IsChecked属性与DataGrid所在的ObservableCollection的当前行中的T实例上的属性(在Binding中指定)之间的双向绑定势必。

您不提供Xaml,所以我将使用您的问题中引用的我博客文章中的示例。的解决方法涉及指定DataGridTemplateColumn含有CheckBox和限定所述点击事件如下:在这种情况下

<data:DataGrid x:Name="FilteredPeople" AutoGenerateColumns="False"> 
    <data:DataGrid.Columns> 
    <data:DataGridTextColumn Header="First Name" Binding="{Binding FirstName}" /> 
    <data:DataGridTextColumn Header="Age" Binding="{Binding Age}" /> 
    <data:DataGridCheckBoxColumn Header="Visible" Binding="{Binding IsVisible}" /> 

    <data:DataGridTemplateColumn Header="Row Filter"> 
     <data:DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <CheckBox x:Name="RowFilterButton" IsChecked="{Binding IsVisible}" 
       Content="Filter" Tag="{Binding}" Click="RowFilterButton_Click" /> 
     </DataTemplate> 
     </data:DataGridTemplateColumn.CellTemplate> 
    </data:DataGridTemplateColumn> 

    </data:DataGrid.Columns> 
</data:DataGrid> 

一种替代将CheckBox可以是一个切换按钮或正常按钮控件。注意CheckBox的Tag属性的绑定。这有助于找出哪一行的复选框从代码隐藏点击:

private void RowFilterButton_Click(object sender, RoutedEventArgs e) 
{ 
    Person person = ((CheckBox)sender).Tag as Person; 
} 

然后,您可以从的ObservableCollection <牛逼>删除此人或修改它的属性过滤或更新DataGrid中适当。

这通常是这个答案会结束的地方,但如果您没有this update installed,Silverlight 2 DataGrid的默认SDK版本中会有一个bug阻止此操作。在这种情况下,如果您在单击CheckBox时导致DataGrid被过滤(即复选框具有焦点),则DataGrid不会显示CheckBox所在的行(取而代之,您看起来像不可见的行) 。

为了避免这种错误,安装update或发起的ObservableCollection <Ť>数据网格从数据网格的行as per this example外部的控制绑定到的任何操作。

+0

感谢您的帮助。这是一个非常干净的方法,然后使用PreparingCellForEdit事件,因为它不需要用户双击。谢谢你的帮助。 – 2009-02-14 16:11:07