Wpf 如何使用MVVM获取多个选中的datagrid复选框项
我有datagrid,它由多个数据网格复选框组成,我想获取datagrid选中的项,我只能获取单个选中的行项,但我需要复选框集合,下面是我正在使用的代码。请让我知道如何解决此问题 **Xaml*****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 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中的数据表。相反,定义某种“用户”类,然后