WPF Datagrid选择行并将其绑定到事件

时间:2019-01-03 09:44:27

标签: c# wpf

嗨,我有一个包含一些行的DataGrid,现在当我选择一行时,我想同时触发该选择的事件,但是我遇到了问题。

这是我的用户控制资源:

    <UserControl.Resources>
        <Style x:Key="CollapsedRow" TargetType="{x:Type DataGridRow}">

            <EventSetter Event="MouseLeftButtonDown" Handler="OnGroupChange" />

            <Setter Property="DetailsVisibility" Value="Collapsed" />

            <Style.Triggers>
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter Property="Background" Value="DodgerBlue" />
                </Trigger>
                <Trigger Property="IsSelected" Value="True">
                    <Setter Property="Background" Value="SteelBlue"/>
                    <Setter Property="Foreground" Value="White"/>
                </Trigger>
            </Style.Triggers>

        </Style>
    </UserControl.Resources

我的datagrid xaml很简单:

<DataGrid RowStyle="{StaticResource CollapsedRow}" AutoGenerateColumns="false" CanUserAddRows="false" ItemsSource="{Binding Applications}" >

如您所见,我为单击鼠标设置了一个事件设置器,它将触发事件并触发,如果选中该事件将更改行的背景色。但是它的工作方式就像首先您需要选择要单击的行,然后触发第二次单击的事件。一键就能做到吗?

1 个答案:

答案 0 :(得分:1)

在更改行的选择之前,将触发MouseLeftButtonDown事件。这意味着您行的属性IsSelected将是false。您可以使用Selected事件,该事件在更改选择后会触发。只需添加一个新的处理程序,例如

<EventSetter Event="Selected" Handler="OnSelected"/>

private void OnSelected(object sender, RoutedEventArgs e)
{
    Debug.WriteLine("Column selection change, IsSelected = " + ((DataGridRow)sender).IsSelected);
}