![](/img/trans.png)
[英]change checkbox state in DataGridTemplateColumn after row is selected in datagrid using xaml
[英]How to get <checkbox> state inside <datagridtemplatecolumn> on any row's checkbox event in datagrid
我的WPF應用程序中有一個數據網格-dgUserSession。 它包含3列,其中只有2個文本列與數據庫綁定,第一個是手動創建的復選框。
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="False" Name="userSelection" Checked="DataGridCheckBox_Checked" Unchecked="DataGridCheckBox_Unchecked"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.HeaderTemplate>
<DataTemplate>
<CheckBox Checked="chkHeader_Checked" Unchecked="chkHeader_Unchecked" Name="headerSelection">
</CheckBox>
</DataTemplate>
</DataGridTemplateColumn.HeaderTemplate>
</DataGridTemplateColumn>
我想遍歷所有四個事件中的每一行狀態
private void chkHeader_Checked(object sender, RoutedEventArgs e)
{
for (int i = 0; i < dgUserSession.Items.Count; i++)
{
}
}
但是在此迭代過程中是否選中了如何獲取復選框? 我在護目鏡上呆了3個小時,但沒有結果。
提前致謝。
在WPF中, 始終最好以UI所需的形式創建數據類型類。 通過這種方式,我的意思是應該將數據綁定到所有三個列,而不是將數據綁定到DataGrid
中的三個列中的兩個。 如果將bool
屬性添加到DataGrid
每行中顯示的類中,則可以從該類訪問Checkbox
的值。
如果您沒有將自定義類型的集合數據綁定到DataGrid.ItemsSource
,那么我建議您這樣做。 只需創建一個類(實現INotifyPropertyChanged
接口)並為每個列(在您的情況下為3)具有一個屬性即可。 然后,數據將該類型的ObservableCollection
綁定到您的DataGrid.ItemsSource
屬性:
public ObservableCollection<YourDataType> Items { get; set; }
...
然后,在YourDataType
類的屬性設置器中,每次更改任何值時,您都可以訪問每個屬性/列的值:
public someType SomeProperty
{
get { return someProperty; }
set
{
someProperty = value;
NotifyPropertyChanged("SomeProperty");
// each time this is changed, you have access to the other property values here
}
}
您還可以遍歷集合以查找Checkbox
的值:
foreach (YourDataType item in Items)
{
bool checkBoxValue = item.NewBoolProperty;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.