【发布时间】:2014-03-27 20:59:03
【问题描述】:
我有一个 DataGrid,它的复选框绑定到项目的 IsSelected 属性。我正在尝试创建一个功能,允许您通过单击/拖动或单击/移位单击/ ctrl 单击其他行来选择网格中的行,然后右键单击>选择以设置我的项目的IsSelected 属性。复选框工作正常,正确地双向绑定到我的对象的 IsSelected 属性。
我已经达到了 90%,但是当我发送 DataGrid 的 SelectedItems 值时,它有时会发送已选择但不再选择的项目。
我找到了将 DataGrid 的 SelectedItems 发送到命令 here. 的代码
<DataGrid ItemsSource="{Binding MyItemList}">
<DataGrid.ContextMenu>
<ContextMenu>
<MenuItem Header="Select"
Command="{Binding Data.SelectCommand, Source={StaticResource BindingProxy}}"
CommandParameter="{Binding PlacementTarget.SelectedItems,RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ContextMenu}}}" />
</ContextMenu>
</DataGrid.ContextMenu>
来自我的视图模型的 C# 代码
private void Select(object selectedObjects)
{
var items = (System.Collections.IList)selectedObjects;
var collection = items.Cast<ItemType>().ToList();
foreach (var item in collection)
item.IsSelected = true;
}
这是我复制它的方法。
场景 1:
- 控件加载,默认没有选择任何内容
- 我单击并拖动以选择所有选项
- 右键单击并选择
Select - 所有复选框现在都设置为选中状态,正如预期的那样
- 单击第一行,使其仅突出显示
- 右键选择
Deselect - 所有行的复选框都被取消选中(错误!)
场景 2:
- 控件加载,未选择任何内容
- 单击并拖动并选择前 2 个条目
- 右键单击并选择
Select,复选框被选中 - 取消选中第 1 行和第 2 行
- 选择第 4 行和第 5 行
- 右键 >
Select - 现在检查第 1、2、4 和 5 行。 (错误)
- 取消选中 1、2、4 和 5
- 选择第 7 行和第 8 行
- 右键>
Select - 现在检查第 1、2、7 和 8 行。 (只是什么。)
我发现很难找到某种一致的理由来说明它的行为方式。我最好的猜测是,当我右键单击数据网格时,它不会充当正常的选择操作。任何人都知道为什么会发生这种情况,或者我如何强制网格正确选择我告诉它的行?
【问题讨论】:
标签: wpf mvvm datagrid contextmenu