我有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)
{
}
}
答案 0 :(得分:2)
您的复选框列绑定到名为UserID
的属性,我猜这是DataTable中列的名称。每当您选中/取消选中数据网格中的复选框时,绑定都会在DataTable的相关DataRow中将UserID
的值更改为true或false。
为什么要将复选框列绑定到用户ID?我怀疑这不是你真正想要的。相反,您可能需要在DataTable中添加一个布尔列(例如IsSelected
),然后将复选框列绑定到。
看起来您正在使用MVVM,因此无法从视图模型中访问数据网格项。您只能访问网格绑定的数据(即您的DataTable)。您的视图模型代码需要遍历此DataTable中的行,检查UserID列的值(如果添加一个,则检查“IsSelected”列!)以确定是否在数据网格中选中了该行的复选框。
您要绑定的SelectedItem
属性与您的复选框列完全无关。选中和取消选中这些对SelectedItem
没有影响。此属性用于确定用户使用鼠标选择的行(这使行具有不同的b / g颜色)。忘记这个属性 - 它与你想要做的事情无关。
正如其他地方已经提到的那样,尝试避免使用WPF中的DataTables。相反,定义某种“用户”类,让你的视图模型为你的网格公开这些类的集合。
答案 1 :(得分:1)
您似乎错过了数据绑定的全部内容......即您可以访问代码中DataGrid
中显示的所有数据。您已将ManualDataTable DataTable
属性绑定到DataGrid
,因此绑定到RadioButton
控件的数据值全部位于DataTable
的一列中。
因此,访问它们所需要做的就是查看DataTable
。有几种方法可以实现这一点,但这里有一个:
foreach(DataRow row in ManualDataTable.Rows)
{
if (row[requiredColumnIndex] == true) AddRowToSomeCollection(row);
}
但是,如果您要继续使用WPF,我会认真地建议您停止使用这些旧类,例如DataTable
。通常在WPF中,我们定义自定义类,从长远来看,这使得一切变得更加简单。