如何在WPF datagridcheckboxcolumn中选中/取消选中复选框?以及如何在后面的代码中检索isChecked值?

时间:2012-05-13 03:28:09

标签: c# .net wpf

我正在构建一个电子邮件发送应用程序。在我的窗口中,我有以下数据网格:

<DataGrid AutoGenerateColumns="False" CanUserAddRows="False" HorizontalAlignment="Stretch" Name="dgdTo" VerticalAlignment="Stretch" ItemsSource="{Binding}" >
        <DataGrid.Columns>
            <DataGridTextColumn x:Name="contactFName" IsReadOnly="True" Binding="{Binding Path=FirstName}" Header="First Name" Width="2*"/>
            <DataGridTextColumn x:Name="contactLName" IsReadOnly="True" Binding="{Binding Path=LastName}" Header="Last Name" Width="2*"/>
            <DataGridTextColumn x:Name="contactEmail" IsReadOnly="True" Binding="{Binding Path=Email}" Header="E-mail" Width="2*"/>
            <DataGridCheckBoxColumn x:Name="mailSend" Header="Send mail" Width="*"/>
        </DataGrid.Columns>
</DataGrid>

前三列绑定到数据库中的ContactPerson表。最后一列表示是否应该向该人发送电子邮件。因为,我在ContactPerson对象中没有字段'boolean SendMail',我需要另一种方法来获取复选框的值。

如何获取/设置特定行的复选框值?(C#)

2 个答案:

答案 0 :(得分:1)

首先,要为datagrid设置值,请创建一个DataTable(内存中的数据库)。在该DataTable中,列为FirstNameLastNameEmail。它们都是字符串类型。

添加一个应为Boolean DataType的列,并将其命名为Sendmail。以这种方式绑定Binding="{Binding Path=Sendmail}"。现在,当您提供gridview的数据源时,那么在最后一列中的任何位置都是真的,将勾选并取消选中false。

答案 1 :(得分:1)

您需要在数据库和用户界面之间引入一个中间对象(ViewModel)。

在您的情况下,这可能是ObservableCollection UIContactPerson,其中UIContactPerson是数据库中ContactPerson的副本,其中包含 SendMail 布尔属性。

然后,不是将UI直接绑定到数据库对象,而是绑定到ViewModel。显然,您还需要通过某种方式从基础数据存储中刷新数据并发回更改。