当前位置:  开发笔记 > 编程语言 > 正文

是Silverlight DataGrid Checkbox事件吗?

如何解决《是SilverlightDataGridCheckbox事件吗?》经验,为你挑选了1个好方法。

是否可以让绑定的DataGridCheckBoxColumn调用click方法?或事件行级或行输入事件?

我正在尝试实现一个更新底层过滤的ObservableCollection集合的数据网格(这里很棒)http://petermcg.wordpress.com/2009/01/29/filtering-silverlight-datagrid-rows/

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

有关如何实现数据网格的任何建议,在按下复选框时更新基础集合?

请在下面找到我的Xaml,它真的没什么特别的.





1> Peter McG..:

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

您没有提供您的Xaml,因此我将使用您问题中引用的博客文章中的示例.解决方法涉及指定包含CheckBox 的DataGridTemplateColumn并定义Click事件,如下所示:


  
    
    
    

    
      
        
          
        
      
    

  

在这种情况下,CheckBox的替代方法可以是ToggleButton或普通的Button控件.注意CheckBox的Tag属性的绑定.这有助于找出从代码隐藏中点击CheckBox的行:

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

然后,您可以从ObservableCollection 中删除此人或更改其属性以根据需要过滤或更新DataGrid.

这通常是这个答案结束的地方,但是如果您没有安装此更新,则Silverlight 2 DataGrid的默认SDK版本中存在一个错误,可以防止这种情况发生.在这种情况下,如果在单击CheckBox时导致DataGrid被过滤(即Checkbox具有焦点),则DataGrid不会绘制CheckBox所在的行(而不是看起来像是一条不可见的行) .

要避免此错误,请按照此示例安装更新或启动DataGrid绑定到DataGrid行外的Control的ObservableCollection 的任何操作.

推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有