我有一个WPF UI,包含以下元素:
我想要做的是将两个(由红色箭头显示)复选框绑定在一起,这样当选中一个时,另一个也会被检查,反之亦然。
我已经看过这些问题了:
1)WPF Binding with 2 Checkboxes
但是当我尝试这个时,点击处理程序停止工作。 (复选框完全停止工作)
2)wpf bindings between two checkboxes
当我使用触发器时,一个复选框触发另一个,并且它会触发另一个,然后继续... UI卡住。
我的代码示例:
<DataGrid x:Name="DataGrid1">
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox x:Name="SelectionCheckBox1" PreviewMouseLeftButtonDown="SelectionCheckBox1_PreviewMouseLeftButtonDown"
Loaded="SelectionCheckBox1_Loaded"
IsChecked="{Binding ElementName=HeaderCheckBox1, Path=IsChecked, Mode=TwoWay}">
</CheckBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<DockPanel LastChildFill="True">
<DataGrid>
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.HeaderTemplate>
<DataTemplate>
<CheckBox x:Name="HeaderCheckBox1" PreviewMouseLeftButtonDown="HeaderCheckBox_PreviewMouseLeftButtonDown"
IsChecked="{Binding ElementName=SelectionCheckBox1, Path=IsChecked, Mode=TwoWay}">
</CheckBox>
</DataTemplate>
</DataGridTemplateColumn.HeaderTemplate>
</DataGrid.Columns>
</DataGridTemplateColumn>
</DataGrid>
</DockPanel>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
</DataGrid>
关注:因为第二个复选框仅在选中该行后出现(这意味着选中了另一个复选框),我也无法通过VisualTreeHelpers找到第二个复选框。
一些想法甚至可能导致一个可能的解决方案将非常感激。
答案 0 :(得分:0)
我建议2将它们绑定到一个他们都可以访问的属性(例如窗口内的某个地方),因为使用解决方案1,你创建了一个无限循环
答案 1 :(得分:0)
您需要在ViewModel中创建一个属性,称该属性名为IsSelected,然后您必须将这些复选框绑定到该属性。它应该将dataContext作为您的视图模型,而不是元素。
IsChecked =&#34; {Binding IsSelected,Mode = TwoWay}&#34;
如果您的VM不是数据上下文,那么您必须遍历以查找VM然后绑定到它