使用BindingContext获取当前对象没有问题,但是当我在datagridview中选择了多行时该怎么办?如何遍历每个对象?
答案 0 :(得分:2)
这不容易或有趣。默认情况下,不支持绑定数据网格中的多个选定行。我使用Functional Fun中的MultiSelectBehavior:
http://blog.functionalfun.net/2009/02/how-to-databind-to-selecteditems.html
以下是我的工作说明:
为了实现这一点,我做到了这一点:
将此命名空间定义添加到视图中: 的xmlns:FF = “CLR-名称空间:FunctionalFun.UI.Behaviours;装配= MultiSelectBehavior”
在datagrid中,添加此处显示的最后两行(ff:...和SelectionMode ....): ff:MultiSelectorBehaviours.SynchronizedSelectedItems =“{Binding SelectedTasks}” 的的SelectionMode = “扩展”强>
注意:在视图模型中,即使首次声明,SelectedTasks也不能为空。
否:私人ObservableCollection selectedTasks;
是:私有ObservableCollection selectedTasks = new ObservableCollection();
这是一些有效的实际代码:
xmlns:ff="clr-namespace:FunctionalFun.UI.Behaviours;assembly=MultiSelectBehavior"
<DataGrid Grid.Row="1" AutoGenerateColumns="False" IsReadOnly="True" HeadersVisibility="Column"
ItemsSource="{Binding SelectedApplicationServer.ApplicationsWithOverrideGroup}"
ff:MultiSelectorBehaviours.SynchronizedSelectedItems="{Binding SelectedApplicationsWithOverrideGroup}"
SelectionMode="Extended">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Path=Application.Name}" Header="Name" Width="150" />
<DataGridTextColumn Binding="{Binding Path=Application.Version}" Header="Version" Width="100"/>
<DataGridTextColumn Binding="{Binding Path=CustomVariableGroup.Name}" Header="Override Group" Width="*"/>
</DataGrid.Columns>
</DataGrid>
希望它有所帮助。
编辑:我只是将Functional Fun代码添加为我的解决方案中的项目,然后我在我的视图项目中引用它:
答案 1 :(得分:0)
假设您的DataGridView绑定到BindingSource
,请使用DataMember
属性:
myDataGridView.DataSource = someBindingSource;
myDataGridView.DataMember = "SomeCollectionProperty";
然后,您可以检索DataGridView
:
IList dataBoundItems =
((CurrencyManager)grid.BindingContext[grid.DataSource, grid.DataMember]).List;
您可能还希望使用以下内容将此列表转换为IEnumerable<T>
var myItems = dataBoundItems.OfType<myClass>();