我有了绑定到的项目IsSelected
属性复选框一个DataGrid。我试图创建一个功能,让您通过点击/在网格中选择行拖动或点击/ shift点击/ CTRL点击其他行,然后右击>选择设定的我的项目IsSelected
属性。复选框被完美的工作,妥善双向绑定到我的我的对象IsSelected
财产。WPF的DataGrid SelectedItems不取消
我也得到了90%,但是当我送DataGrid的SelectedItems
价值,它有时会发送一个为选择,但不再物品。
我发现的代码从我的视图模型
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;
}
送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#代码这是我做的重现。
方案1:
- 控制负载,没有被默认选中
- 我点击和拖动来选择所有选项
- 右击并选择
Select
- 所有复选框现在设置作为托运,如预期
- 点击第一行所以只有它强调
- 右键点击通道上OOSE
Deselect
- 所有行的复选框被取消(错了!)
方案2:
- 控制负荷,未选中任何
- 单击并拖动,选择前2项
- 权单击并选择
Select
,复选框得到遏制 - 取消选中行1和2
- 选择第4行和第5行
- 右键单击>
Select
- 现在检查第1,2,4和5行。 (错误的)
- 取消选中1,2,4,和5
- 选择行7和8
- 右键点击>
Select
- 行1,2,7和8,现在被检查。 (正是这样)
我很难找出某种一贯的理由,它的行为是这样的。我最好的猜测是,当我右键点击数据网格时,它不会像通常的选择操作那样工作。任何人有任何线索,为什么发生这种情况,或者我怎么能强迫电网正确选择行我告诉它?
对不起,我不是很明确,我试图简洁。我有一个viewmodel,上面的C#代码来自viewmodel。该复选框正确绑定到我的对象的IsSelected属性,这不是问题。 – DLeh
我想要做的是让我的viewmodel中的另一个对象绑定到DataGrid的SelectedItems属性,然后我的Select方法可以简单地查看该列表,但它不会让我绑定到SelectedItems属性。这就是为什么我试图将DataGrid的SelectedItems作为参数发送到Select命令/方法 – DLeh
我想我意外地在您的答案上点击了编辑而不是我的问题。对于那个很抱歉。 – DLeh