以编程方式在 WPF DataGrid 中选择多行

Posted

技术标签:

【中文标题】以编程方式在 WPF DataGrid 中选择多行【英文标题】:Multiple Row Selection In WPF DataGrid Programmatically 【发布时间】:2012-10-23 00:47:27 【问题描述】:

嗨,我有一个 wpf 数据网格,它有两列说

key    Value
1       abc
2       xyz
3       pqr

我有一个复选框,其值相当于列中的键。如果选中相关键,则必须选择对应的行。选中多个复选框,选择数据网格中的多行。

【问题讨论】:

【参考方案1】:

Xaml:

<StackPanel>
    <DataGrid AutoGenerateColumns="False" ItemsSource="Binding List">
        <DataGrid.Columns>
            <DataGridCheckBoxColumn Header="Check" 
                Binding="Binding IsCheck, UpdateSourceTrigger=PropertyChanged"/>
            <DataGridTextColumn Header="Key" Binding="Binding Key"/>
            <DataGridTextColumn Header="Value" Binding="Binding Value"/>
        </DataGrid.Columns>
    </DataGrid>
    <CheckBox Content="1" DataContext="Binding List[0]" IsChecked="Binding IsCheck"/>
    <CheckBox Content="2" DataContext="Binding List[1]" IsChecked="Binding IsCheck"/>
    <CheckBox Content="3" DataContext="Binding List[2]" IsChecked="Binding IsCheck"/>
</StackPanel>

后面的代码:

public partial class MainWindow : Window

    public MainWindow()
    
        //fill 'List' here...
        DataContext = this;
        InitializeComponent();
    
    //List Observable Collection
    private ObservableCollection<Row> _list = new ObservableCollection<Row>();
    public ObservableCollection<Row> List  get  return _list;  

行类:

public class Row: DependencyObject

    //Key Dependency Property
    public int Key
    
        get  return (int)GetValue(KeyProperty); 
        set  SetValue(KeyProperty, value); 
    
    public static readonly DependencyProperty KeyProperty =
        DependencyProperty.Register("Key", typeof(int), typeof(Row), new UIPropertyMetadata(0));
    //Value Dependency Property
    public string Value
    
        get  return (string)GetValue(ValueProperty); 
        set  SetValue(ValueProperty, value); 
    
    public static readonly DependencyProperty ValueProperty =
        DependencyProperty.Register("Value", typeof(string), typeof(Row), new UIPropertyMetadata(""));
    //IsCheck Dependency Property
    public bool IsCheck
    
        get  return (bool)GetValue(IsCheckProperty); 
        set  SetValue(IsCheckProperty, value); 
    
    public static readonly DependencyProperty IsCheckProperty =
        DependencyProperty.Register("IsCheck", typeof(bool), typeof(Row), new UIPropertyMetadata(false));

【讨论】:

以上是关于以编程方式在 WPF DataGrid 中选择多行的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式将列和行添加到 WPF Datagrid

以编程方式 WPF DataGrid 行双击事件

WPF DataGrid怎么实现多行选中,不能使用CheckBox

如何使用 MVVM 应用程序在 WPF 中以编程方式设置 DataGrid 的选定项?

以编程方式为 DataGrid 创建 WPF DataGridTemplateColumn

如何在 WPF 的 Datagrid 中设置以编程方式生成的 ComboBox 的启用属性?