2012-05-13 13 views
0

我正在構建一個電子郵件發送應用程序。在我的窗口中,我有以下數據網格:如何檢查/取消選中WPF datagridcheckboxcolumn中的複選框?以及如何在後面的代碼中檢索isChecked值?

<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對象中沒有字段'布爾SendMail',所以我需要另一種方法來獲取複選框的值。

如何獲取/設置特定行的複選框值?(C#)

回答

1

您需要在數據庫和用戶界面之間引入一箇中間對象(一個ViewModel)。

這可能是UIContactPersonObservableCollection你的情況,其中UIContactPersonContactPerson副本出你的數據庫的一個額外的SendMail布爾屬性。

然後,您不需要將UI直接綁定到數據庫對象,而是綁定到ViewModel。顯然,您還需要連接一些刷新底層數據存儲中的數據並將更改發回的方法。

+0

謝謝,我試過了,它的工作原理。在這種情況下,我不需要進行雙向綁定,所以不需要發送更改。 – reederz

1

首先,設定值,你的數據網格使一個DataTable(內存數據庫),在該數據表化妝列即FirstNameLastNameEmail。他們都將是字符串類型。

添加這應該是布爾列DataType並將其命名爲Sendmail。以這種方式綁定Binding="{Binding Path=Sendmail}"。現在,當您給出gridview的數據源時,在上一列中,e是真的複選框將被打鉤並取消選中。

相關問題