Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Silverlight DataGrid是否为复选框事件?_Silverlight_Datagrid - Fatal编程技术网

Silverlight DataGrid是否为复选框事件?

Silverlight DataGrid是否为复选框事件?,silverlight,datagrid,Silverlight,Datagrid,有没有可能让绑定的DataGridCheckBoxColumn调用click方法?或事件行级别或行输入事件 我正在尝试实现一个datagrid,它更新底层过滤的ObservableCollection集合(这里的sameple很棒) 如果我按下更新按钮或其他外部方法,过滤工作正常。但是,我似乎找不到任何内部网格事件或DataGridCheckBoxColumn上允许我调用更新过滤器逻辑的任何内容 关于如何实现一个datagrid,在按下复选框时更新基础集合,有什么建议吗 请在下面找到我的Xaml

有没有可能让绑定的DataGridCheckBoxColumn调用click方法?或事件行级别或行输入事件

我正在尝试实现一个datagrid,它更新底层过滤的ObservableCollection集合(这里的sameple很棒)

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

关于如何实现一个datagrid,在按下复选框时更新基础集合,有什么建议吗

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



该类型当前不提供单击事件,事实上,它当前不提供任何事件。在这种类型的列中呈现的单元格只在CheckBox控件的IsChecked属性和DataGrid绑定到的ObservableCollection当前行中T实例的属性(在绑定中指定)之间实现双向绑定

您没有提供Xaml,因此我将使用您的问题中引用的博客文章中的示例。解决方法包括指定包含复选框的复选框并定义单击事件,如下所示:

<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>
然后,您可以将此人从ObservaleCollection中删除,或者根据需要更改其属性以过滤或更新DataGrid

这通常是这个答案的结尾,但如果您没有,Silverlight 2 DataGrid的默认SDK版本中有一个阻止这一点的。在这种情况下,如果您在单击该复选框(即该复选框具有焦点)时导致数据网格被过滤,则该错误将通过DataGrid不绘制复选框所在的行(而您得到的看起来像一个不可见的行)来表现出来


要避免此错误,请从DataGrid行之外的控件安装或启动DataGrid绑定到的ObservableCollection的任何操作。

感谢您的帮助。这是一个比使用PreparingCellForEdit事件更干净的方法,因为它不需要用户双击。谢谢你的帮助。彼得,只要读一下你的答案,这个标签“{Binding}”技巧就让我开心了,谢谢!
private void RowFilterButton_Click(object sender, RoutedEventArgs e)
{
    Person person = ((CheckBox)sender).Tag as Person;
}