【发布时间】:2016-10-22 15:05:43
【问题描述】:
我有一个关于 wpf datagrid 和 DatagridTemplateColumn 行为的问题。
<DataGrid
ItemsSource="{Binding Items, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
inf:MultiSelectorBehaviours.SynchronizedSelectedItems="{Binding SelectedItems, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
SelectionUnit="FullRow" SelectionMode="Extended">
<DataGrid.Columns>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Background="Transparent"
BorderThickness="0"
BorderBrush="Transparent"
Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path=DataContext.ExecuteCommand}" CommandParameter="{Binding}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
我的问题是:当我按下 DataGridTemplateColumn 中的按钮并且未选择行时,我的模型中会触发命令。但是当首先选择我的行时,不会触发命令。有人知道为什么吗?
感谢您的帮助...
编辑:当我将 SelectionMode 从“扩展”更改为“单”时,它按预期工作。但我必须使用“扩展”...
【问题讨论】:
-
我认为你需要
<DataTemplate.Triggers>和<EventTrigger>来做同样的事情。您当前仅处理按钮单击并将命令传递给查看模型。您可能需要整行点击。 -
你能再解释一下吗?因为我什至无法理解为什么在未选择行时会触发命令...
-
这是因为当您单击按钮时,会触发按钮命令。当您选择行时,您为什么期望按钮命令触发?它不会被解雇。做一件事。为 PreviewMouseDown 创建一个数据模板触发器并为按钮和行创建句柄。它应该做的工作。如果有任何问题,请尝试恢复。
-
我们说的一样吗?我只希望在按下按钮时触发命令。当未选择行时,这工作正常。当我先选择行然后按下按钮时,没有任何反应......