silverlight - 是 Silverlight DataGrid Checkbox 事件吗?

标签 silverlight datagrid

是否可以让绑定(bind)的 DataGridCheckBoxColumn 调用点击方法?或者事件行级别或行输入事件?

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

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

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

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



最佳答案

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

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

<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 的替代方案可以是 ToggleButton 或普通 Button 控件。请注意 CheckBox 的 Tag 属性的绑定(bind)。这有助于从代码隐藏中找出在哪一行中单击了 CheckBox:

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

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

这通常是这个答案结束的地方,但如果你没有 this update installed有一个bug在 Silverlight 2 DataGrid 的默认 SDK 版本中可以防止这种情况。在这种情况下,如果您在单击 CheckBox 时导致 DataGrid 被过滤(即 Checkbox 具有焦点),则该错误将通过 DataGrid 不绘制 CheckBox 所在的行(而不是您得到的看起来像一个不可见的行)来表现出来.

为避免此错误,请安装 update或从 DataGrid 行之外的控件启动对 DataGrid 绑定(bind)到的 ObservableCollection 的任何操作 as per this example .

关于silverlight - 是 Silverlight DataGrid Checkbox 事件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/548277/

相关文章:

c# - 使用反射订阅 Prism EventAggregator 事件

wpf - 是否可以在没有行的 DataGrid 中显示水平滚动条?

silverlight - Silverlight 会减少我的网络流量吗?

silverlight - 关于 Silverlight 的度量单位的问题

wpf - 将 DynamicObject 绑定(bind)到具有自动列生成的 DataGrid?

apache-flex - 在Adobe Flex中为数据网格行设置背景色

asp.net - YUI 数据表列过滤器

c# - 如何在代码中为 DataTemplate 分配事件处理程序?

silverlight - XAML 图标 - 如何使用?

c# - 在 silverlight 中调用一个 aspx 页面,而不打开它