【发布时间】:2019-07-09 17:49:12
【问题描述】:
最近我们开始在工作中使用 WPF。 现在我想从对象列表 (DataGrid ItemSource) 创建一个 DataGrid,其中包含项目角色、应该执行该工作的员工以及也可以执行该工作的员工列表。让我们将此列表称为“MainList”。在该 DataGrid 中是一个组合框列,它使用另一个对象列表作为 ItemSource,您可以在其中更改工作的员工。我将此列表称为“ChildList”。该列表包含在 MainList 中(如前所述),我使用正确的 BindingPath 绑定它。到目前为止,一切都很好。现在我必须设置 SelectedItem(以显示当前选择了哪个员工)。从 MainList 我可以得到应该从 ChildList 中选择的员工。显然我不能通过绑定来做到这一点。不幸的是,我无法在代码隐藏中获取 SelectedItem 属性。基本上我需要遍历 DataGrid 中的每一行并获取应该在 ComboBox 中选择的 Item。然后我会遍历 ComboBox Items,直到找到匹配的 Item 并将其设置为 SelectedItem。但我找不到这样做的方法。
我也尝试使用 DataGridComboBoxColumn,但它只有 SelectedItemBinding 属性,并且由于您在绑定时无法进行比较,因此这应该不起作用。 我还尝试获取代码隐藏中的每个单元格,这是一个 ComboBox,但到目前为止没有成功。
<DataGrid x:Name="DgvProjectTeam" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" AutoGenerateColumns="False" Margin="0" RowHeight="40" CanUserAddRows="False" BorderThickness="1" VerticalScrollBarVisibility="Auto" HorizontalGridLinesBrush="#FFA2B5CD" VerticalGridLinesBrush="#FFA2B5CD" ItemsSource="{Binding}" VirtualizingStackPanel.IsVirtualizing="False">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Resource" Width="200" x:Name="DgtProjectCoreTeam">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox Name="CbxResource" ItemsSource="{Binding Path=ListOfPossibleResources}" DisplayMemberPath="ResourceOfQMatrix.Fullname"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
DataGrid 显示了我需要的一切。我只是不知道如何在代码隐藏中为每个生成的 ComboBoxCells 设置 SelectedItem。
谁有想法?
【问题讨论】:
-
您可以通过绑定来做任何事情 - 假设您有一个数据项列表,您应该将这些数据项包装在可以将网格绑定到的视图模型中。轻量级
GridRow包装器(一般类型的包装器)可用于提供网格可以管理的附加属性,例如SelectedItem- 然后可以绑定到,然后您可以举例说明绑定的视图模型,而不是编写特定于网格的代码-在后面。 -
认为我在手机上写了这条评论并且自动更正(auto-mangle?)已经成功了,希望你能明白 :)
-
感谢 Charleh 的回答。我像你一样尝试过,并且用 ViewModel 提到了 redcurry。这似乎按照我想要的方式工作。非常感谢您的努力!
标签: wpf combobox datagrid code-behind selecteditem