Wpf 如何使用MVVM获取多个选中的datagrid复选框项

Wpf 如何使用MVVM获取多个选中的datagrid复选框项,wpf,mvvm,checkbox,datagrid,Wpf,Mvvm,Checkbox,Datagrid,我有datagrid,它由多个数据网格复选框组成,我想获取datagrid选中的项,我只能获取单个选中的行项,但我需要复选框集合,下面是我正在使用的代码。请让我知道如何解决此问题 **Xaml***** <DataGrid SelectedItem="{Binding SelectedRow, Mode=TwoWay}" ItemsSource="{Binding ManualDataTable}" Background="{Binding ElementName=gd,Path=Ba

我有datagrid,它由多个数据网格复选框组成,我想获取datagrid选中的项,我只能获取单个选中的行项,但我需要复选框集合,下面是我正在使用的代码。请让我知道如何解决此问题

**Xaml*****

<DataGrid SelectedItem="{Binding SelectedRow, Mode=TwoWay}" ItemsSource="{Binding ManualDataTable}"   Background="{Binding ElementName=gd,Path=Background}">
<DataGrid.Columns>
<DataGridCheckBoxColumn Binding="{Binding UserID}" Width="60" />
<DataGridTextColumn   Binding="{Binding Name}" Width="140" Header="Name"  FontSize="16" FontFamily="segoe_uilight" IsReadOnly="True" />
 </DataGrid.Columns>
             </DataGrid>

<Button BorderBrush="{x:Null}"   Content="Add participants"  Width="220" Height="50"  FontSize="20" Command="{Binding SaveAssignedUser}"/>
DataTable _manualDataTable;
        public DataTable ManualDataTable
        {
            get
            {
                return _manualDataTable;
            }
            set
            {
                _manualDataTable = value;
                RaisePropertyChanged("ManualDataTable");
            }
        }
       private List<DataRowView> selectedRow;
       public List<DataRowView> SelectedRow
        {
            get
            {
                return selectedRow;
            }
            set
            {
                selectedRow = value;
                RaisePropertyChanged(() => SelectedRow);
            }
        }


 public void ExecuteSaveAssignedUser()
 {
 SelectedRow = new List<DataRowView>();**///need multiple checked checkboxes collection**
foreach (DataRowView drv in SelectedRow)
 {
  }
 }

*******视图模型************

<DataGrid SelectedItem="{Binding SelectedRow, Mode=TwoWay}" ItemsSource="{Binding ManualDataTable}"   Background="{Binding ElementName=gd,Path=Background}">
<DataGrid.Columns>
<DataGridCheckBoxColumn Binding="{Binding UserID}" Width="60" />
<DataGridTextColumn   Binding="{Binding Name}" Width="140" Header="Name"  FontSize="16" FontFamily="segoe_uilight" IsReadOnly="True" />
 </DataGrid.Columns>
             </DataGrid>

<Button BorderBrush="{x:Null}"   Content="Add participants"  Width="220" Height="50"  FontSize="20" Command="{Binding SaveAssignedUser}"/>
DataTable _manualDataTable;
        public DataTable ManualDataTable
        {
            get
            {
                return _manualDataTable;
            }
            set
            {
                _manualDataTable = value;
                RaisePropertyChanged("ManualDataTable");
            }
        }
       private List<DataRowView> selectedRow;
       public List<DataRowView> SelectedRow
        {
            get
            {
                return selectedRow;
            }
            set
            {
                selectedRow = value;
                RaisePropertyChanged(() => SelectedRow);
            }
        }


 public void ExecuteSaveAssignedUser()
 {
 SelectedRow = new List<DataRowView>();**///need multiple checked checkboxes collection**
foreach (DataRowView drv in SelectedRow)
 {
  }
 }
DataTable\u manualDataTable;
公共数据表手册数据表
{
得到
{
返回手动数据表;
}
设置
{
_manualDataTable=数值;
RaisePropertyChanged(“ManualDataTable”);
}
}
私有列表selectedRow;
公共列表SelectedRow
{
得到
{
返回selectedRow;
}
设置
{
selectedRow=值;
RaisePropertyChanged(()=>SelectedRow);
}
}
public void executesavassigneduser()
{
SelectedRow=new List();***///需要多个复选框集合**
foreach(选定路径中的DataRowView drv)
{
}
}

您似乎遗漏了数据绑定的全部要点。。。也就是说,您可以从代码隐藏处访问
DataGrid
中显示的所有数据。您已经将
ManualDataTable
属性绑定到
DataGrid
,因此绑定到
单选按钮
控件的数据值都在
数据表
的一列中

因此,访问它们所需要做的只是查看
数据表
。有几种方法可以实现这一点,但这里有一种:

foreach(DataRow row in ManualDataTable.Rows)
{
    if (row[requiredColumnIndex] == true) AddRowToSomeCollection(row);
}

但是,如果您打算继续使用WPF,我会郑重建议您停止使用这些旧类,例如
DataTable
s。通常在WPF中,我们定义自定义类,从长远来看,这会使一切变得更简单。

您似乎忽略了数据绑定的整个要点。。。也就是说,您可以从代码隐藏处访问
DataGrid
中显示的所有数据。您已经将
ManualDataTable
属性绑定到
DataGrid
,因此绑定到
单选按钮
控件的数据值都在
数据表
的一列中

因此,访问它们所需要做的只是查看
数据表
。有几种方法可以实现这一点,但这里有一种:

foreach(DataRow row in ManualDataTable.Rows)
{
    if (row[requiredColumnIndex] == true) AddRowToSomeCollection(row);
}

但是,如果您打算继续使用WPF,我会郑重建议您停止使用这些旧类,例如
DataTable
s。通常在WPF中,我们定义自定义类,从长远来看,这会使一切变得更简单。

您似乎忽略了数据绑定的整个要点。。。也就是说,您可以从代码隐藏处访问
DataGrid
中显示的所有数据。您已经将
ManualDataTable
属性绑定到
DataGrid
,因此绑定到
单选按钮
控件的数据值都在
数据表
的一列中

因此,访问它们所需要做的只是查看
数据表
。有几种方法可以实现这一点,但这里有一种:

foreach(DataRow row in ManualDataTable.Rows)
{
    if (row[requiredColumnIndex] == true) AddRowToSomeCollection(row);
}

但是,如果您打算继续使用WPF,我会郑重建议您停止使用这些旧类,例如
DataTable
s。通常在WPF中,我们定义自定义类,从长远来看,这会使一切变得更简单。

您似乎忽略了数据绑定的整个要点。。。也就是说,您可以从代码隐藏处访问
DataGrid
中显示的所有数据。您已经将
ManualDataTable
属性绑定到
DataGrid
,因此绑定到
单选按钮
控件的数据值都在
数据表
的一列中

因此,访问它们所需要做的只是查看
数据表
。有几种方法可以实现这一点,但这里有一种:

foreach(DataRow row in ManualDataTable.Rows)
{
    if (row[requiredColumnIndex] == true) AddRowToSomeCollection(row);
}

但是,如果您打算继续使用WPF,我会郑重建议您停止使用这些旧类,例如
DataTable
s。通常在WPF中,我们定义自定义类,从长远来看,这会使一切变得更简单。

您的复选框列绑定到名为
UserID
的属性,我猜这是DataTable中的列的名称。无论何时选中/取消选中datagrid中的复选框,绑定都会在DataTable的相关DataRow中将
UserID
的值更改为true或false

为什么要将复选框列绑定到用户ID?我怀疑这不是你真正想要的。相反,您可能需要在数据表中添加一个布尔列(例如,
IsSelected
),并将复选框列绑定到该列

看起来您正在使用MVVM,因此无法从视图模型中访问datagrid项。您只能访问网格绑定到的数据(即数据表)。视图模型代码需要遍历此数据表中的行,检查UserID列的值(如果添加了一列,则检查“IsSelected”列),以确定是否在datagrid中选中了该行的复选框

绑定到的
SelectedItem
属性与复选框列完全无关。选中和取消选中这些选项将不会对
SelectedItem
产生影响。此属性用于确定用户已使用鼠标选择的行(该行具有不同的b/g颜色)。忘了这个属性吧,它与你要做的事情无关

正如在其他地方已经提到的,尝试避免WPF中的数据表。相反,定义某种“用户”类,然后