Wpf Datagrid 设置了模板 checkbox 如何一次选中?

如题所述

第1个回答  2012-04-24
我写了个demo,希望对你有用。
前台:
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<DataGrid Name="dg" Grid.Row="0" AutoGenerateColumns="False" CanUserAddRows="False">
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding Checked,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Binding="{Binding Id,Mode=TwoWay}"/>
<DataGridTextColumn Binding="{Binding Name,Mode=TwoWay}" Width="*"/>
</DataGrid.Columns>
</DataGrid>
<Button Content="全选" Width="50" Height="25" Grid.Row="1" Click="Button_Click"/>
</Grid>
后台:
public partial class MainWindow : Window
{
ObservableCollection<Exp> explist = new ObservableCollection<Exp>();

public MainWindow()
{
InitializeComponent();

explist.Add(new Exp() { Id = 1, Name = "a", Checked = false });
explist.Add(new Exp() { Id = 2, Name = "b", Checked = false });
explist.Add(new Exp() { Id = 3, Name = "c", Checked = false });

dg.ItemsSource = explist;
}

public class Exp : INotifyPropertyChanged
{
public int Id { get; set; }
public string Name { get; set; }

private bool Checked1;

public bool Checked
{
set
{
Checked1 = value;
OnPropertyChanged("Checked");
}
get
{
return Checked1;
}

}

public event PropertyChangedEventHandler PropertyChanged;

protected void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}

}

private void Button_Click(object sender, RoutedEventArgs e)
{
foreach (Exp item in explist)
{
item.Checked = true;
}
}
}追问

感谢答复,但我需要的效果是单个checkbox,选中一行,checkbox就选中,再单击就不选中。默认情况下,要选中单个的话,是要点2次

追答

那重写checkbox的click事件也许行。

第2个回答  2012-04-24
是不是想要点击列标题中的CheckBox就可以全部选中所有行的某个列中的CheckBox啊?追问

不是全选,是单击,选中某一行的中checkbox,默认情况下,datagrid需要点2次才能把某个checkbox选中,因为第一次点是选中一格

追答

加我百度Hi,我传给你个程序 默认就是你说的效果啊 很简单啊

本回答被提问者采纳
相似回答