我实施了:
<DataGrid Name="DataGridProcesso" AutoGenerateColumns="False" ItemsSource="{Binding CollectionView}" CanUserReorderColumns="False" CanUserSortColumns="True" AlternatingRowBackground="#D1DFE7" IsSynchronizedWithCurrentItem="True">
<DataGrid.InputBindings>
<MouseBinding MouseAction="LeftDoubleClick"
Command="{Binding ItemDoubleClickCommand}" />
</DataGrid.InputBindings>
...
但是,如果我点击六次(3次双击),则DoubleClick才有效 我认为第一次点击发生在内部单元格中,在单元格之后,最后发生在行中(我只想,我还不确定),我只想在单元格触发事件时发生LeftDoubleClick。
有什么问题?
我的DataGrid完整代码:
<DataGrid Name="DataGridProcesso" AutoGenerateColumns="False" ItemsSource="{Binding CollectionView}" CanUserReorderColumns="False" CanUserSortColumns="True" AlternatingRowBackground="#D1DFE7" IsSynchronizedWithCurrentItem="True">
<DataGrid.InputBindings>
<MouseBinding MouseAction="LeftDoubleClick" Command="{Binding ItemDoubleClickCommand}" />
</DataGrid.InputBindings>
<DataGrid.Resources>
<Style TargetType="{x:Type DataGridRow}">
<Setter Property="Padding" Value="0,10,0,10" />
<Setter Property="BorderBrush" Value="Transparent"/>
<Setter Property="BorderThickness" Value="0,0,0,0"/>
</Style>
<Style TargetType="{x:Type DataGridCell}">
<Setter Property="BorderBrush" Value="#CCC"/>
<Setter Property="BorderThickness" Value="0,0,1,0"/>
<Setter Property="Cursor" Value="Hand" />
<Setter Property="FontFamily" Value="Segoe" />
<Setter Property="FontSize" Value="14" />
</Style>
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridTemplateColumn Header="Data" Width="Auto" HeaderStyle="{StaticResource DataGridColumnHeaderStyle}">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Label Content="{Binding Path=Data,Mode=OneTime}" ToolTip="Data" HorizontalAlignment="Right"></Label>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Número" Width="Auto" HeaderStyle="{StaticResource DataGridColumnHeaderStyle}">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Label Content="{Binding Path=Numero,Mode=OneTime}" ToolTip="Número"></Label>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Descrição" Width="*" HeaderStyle="{StaticResource DataGridColumnHeaderStyle}">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Label Content="{Binding Path=Descricao, Mode=OneTime}" ToolTip="Descrição"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Andamento" Width="Auto" HeaderStyle="{StaticResource DataGridColumnHeaderStyle}">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Label Content="{Binding Path=Andamento.Descricao, Mode=OneTime}" ToolTip="Andamento"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Lembrete" Width="Auto" HeaderStyle="{StaticResource DataGridColumnHeaderStyle}">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Label Content="{Binding Path=Lembrete, Mode=OneTime}" ToolTip="Lembrete"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
ViewModel的一部分:
private ObservableCollection<Processo> _processos;
public ObservableCollection<Processo> Processos
{
get { return _processos; }
set
{
if (value != _processos)
{
_processos = value;
NotifyPropertyChanged(nameof(Processos));
}
}
}
private ICollectionView _collectionView;
public ICollectionView CollectionView
{
get
{
return _collectionView;
}
set
{
_collectionView = value;
NotifyPropertyChanged(nameof(CollectionView));
}
}
public ICommand ItemDoubleClickCommand => new Command<MainWindowViewModel>(a =>
{
AlterarProcesso((Processo)CollectionView.CurrentItem);
});
答案 0 :(得分:0)
尝试将IsSynchronizedWithCurrentItem="True"
添加到您的DataGrid
媒体资源中。
然后添加CommandParameter="{Binding CollectionView/}"
。
<DataGrid Name="DataGridProcesso" IsSynchronizedWithCurrentItem="True" AutoGenerateColumns="False" ItemsSource="{Binding CollectionView}" CanUserReorderColumns="False" CanUserSortColumns="True" AlternatingRowBackground="#D1DFE7" IsSynchronizedWithCurrentItem="True">
<DataGrid.InputBindings>
<MouseBinding MouseAction="LeftDoubleClick"
Command="{Binding ItemDoubleClickCommand}"
CommandParameter="{Binding CollectionView/}"/>
</DataGrid.InputBindings>
注意/
中的CommandParameter
这可确保它绑定到当前项目。
然后,当它与IsSynchronizedWithCurrentItem="True"
一起使用时,它会确保它与所选项目绑定。