我有一个奇怪的问题,即通过按一个按钮来更改数据网格列的可见性,它会触发与该数据网格列中的复选框相关联的“已检查”事件。
这是我的设置:
我有一个标签为lblUpdateMode
的文本为“单行”或“每行”;
一个具有10列的数据网格,其中最初5列是可见的,而5列是隐藏的;
按下按钮btnChangeView
会翻转每列的可见性;
在其中一个数据网格列中,我有一个CheckBoxColumn,其中包含Checked / Unchecked事件。如果标签text = "every row"
按下一个复选框,则会更新每一行。
但是,如果label = "every row"
和我按下btnChangeView
,它也会触发Checked事件并更新每一行中的复选框。
为什么会这样?我该如何避免呢?
这是Checked事件的代码-没什么奇怪或奇怪的:
private void UpdateDataGridCheckBox(string colname, bool v)
{
if (lblUpdateMode.Content.ToString() == "Every Row")
{
foreach (DataRow dr in DataAccess.Instance.sourceFiles.Rows)
{
dr[colname] = v;
}
}
}
这是此列的XAML:
<DataGrid x:Name="dataGridFiles" Grid.Row="2" Margin="10" Visibility="Collapsed"
ItemsSource="{Binding Path=DataAccess.Instance.sourceFiles, Mode=TwoWay}">
<DataGrid.Columns>
<!--Import-->
<DataGridTemplateColumn Header="Import" Width="60" CanUserReorder="True" Visibility="Collapsed">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox x:Name="checkBoxImport" HorizontalAlignment="Center" VerticalAlignment="Center"
IsChecked="{Binding Path=Import, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
Checked="checkBoxImport_Checked"
Unchecked="checkBoxImport_Unchecked"></CheckBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
谢谢
答案 0 :(得分:0)
在您的XAML
中,将IsChecked
的{{1}}属性绑定到名为CheckBox
的属性。
Import
但是,绑定<CheckBox x:Name="checkBoxImport" HorizontalAlignment="Center" VerticalAlignment="Center"
IsChecked="{Binding Path=Import, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
Checked="checkBoxImport_Checked"
Unchecked="checkBoxImport_Unchecked"></CheckBox>
设置为Mode
,这意味着,
TwoWay
中IsChecked
的{{1}}属性的值发生了变化,则该变化将反映在代码中的CheckBox
属性中,< / li>
和
XAML
属性的值发生变化,则该变化将反映在Import
中实际的Import
中。换句话说,如果用户选中该复选框,则CheckBox
值将设置为XAML
。如果用户取消选中该复选框,则Import
将是true
。相反,如果您在代码中的任何时候将Import
的值更改为false
,则GUI复选框将被取消选中。如果在代码中将Import
设置为false
,则将选中GUI复选框。
我假设在Import
的{{1}}中(您未在帖子中显示),您都更改了true
的值。
因此,假设您要在用户选中/取消选中Click
时想做某事,而不是btnChangeView
,我想您要设置Import
。
阅读this,详细了解WPF中的绑定模式。