我想知道我在这里做错了什么。我有一个名为已选择的列的DataGrid。在它旁边,我在 DataGridTemplateColumn 中有一个 CheckBox ,它也绑定到" Selected" 字段。这个想法是每当选中或取消选中复选框时,所选字段应分别显示 1 或 0 (即布尔值)。这很好用。
但是,我还想在DataGridTemplateColumn的 Header 部分放置另一个CheckBox,以便我能够检查或取消确认 DataGridTemplateColumn.CellTemplate 部分中的所有复选框。这是我遇到问题的地方,当选中或取消选中 DataGridTemplateColumn.CellTemplate 部分中的复选框时,所选字段中的相应值根本不会更改。好像绑定失败了。
我做错了什么?
以下是简单的XAML以及将数据加载到选定字段中的代码。
<Grid>
<DataGrid Name="MyDataGrid" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Width="100" Binding="{Binding Path=Selected}" Header="Selected" />
<DataGridTemplateColumn Width="80">
<DataGridTemplateColumn.Header>
<CheckBox Content=" Slect All" x:Name="headerCheckBox" />
</DataGridTemplateColumn.Header>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox x:Name="Mychk" HorizontalAlignment="Center" IsChecked="{Binding Selected, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" />
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding ElementName=headerCheckBox, Path=IsChecked}" Value="True">
<Setter TargetName="Mychk" Property="IsChecked" Value="True" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
VB.Net
Private Sub MainWindow_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
Dim MyTable = New System.Data.DataTable
MyTable.Columns.Add("Selected", GetType(Integer))
For Each array As Object In New List(Of Integer)() From {0, 0, 0, 0, 0}
MyTable.Rows.Add(array)
Next
MyDataGrid.ItemsSource = MyTable.DefaultView
End Sub
C#
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
{
System.Data.DataTable MyTable = new System.Data.DataTable();
MyTable.Columns.Add("Selected", typeof(int));
foreach (object array in new List<int> {0,0,0,0,0})
{
MyTable.Rows.Add(array);
}
MyDataGrid.ItemsSource = MyTable.DefaultView;
}
}
}
顺便说一下,我试图在没有代码的情况下在XAML中做任何事情(也没有转换器)