Datagrid无需双击即可编辑列

问题描述 投票:2回答:2

我在一个简单的窗口中使用WPF DataGrid来显示模型提供的一些数据。

<DataGrid x:Name="unitTable" ItemsSource="{Binding Units}" AutoGenerateColumns="False">
    <DataGrid.Columns>
         <DataGridCheckBoxColumn Binding="{Binding Path=IsChosen, Mode=TwoWay}" Header="Chosen"></DataGridCheckBoxColumn>
         <DataGridTextColumn Binding="{Binding Path=Name, Mode=TwoWay}" Header="Name"></DataGridTextColumn>
         <DataGridTextColumn IsReadOnly="True" Binding="{Binding Path=IsActive, Mode=TwoWay, Converter={StaticResource boolToActive}}" Header="Active"></DataGridTextColumn>
    </DataGrid.Columns>
</DataGrid>

一切都与模型完美配合,但有一个问题,我不得不双击列来编辑复选框的值,例如。

我想出了这个解决方案:

<Style TargetType="DataGridCell" x:Key="NoDoubleClick">
      <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                 <Setter Property="IsEditing" Value="True" />
            </Trigger>
      </Style.Triggers>
</Style>

然后我将样式分配给Checkbox-并且第一个TextColumn它实际上工作了:)经过一段时间我意识到,当样式“NoDoubleClick”被分配给列时,模型不再更新。

谁能告诉我我做错了什么?

c# wpf wpfdatagrid
2个回答
2
投票

DataGridColumns通常仅在编辑的单元格失去焦点时更新绑定数据。要解决这个问题并使其适用于你的Style,请将你绑定的UpdateSourceTrigger设置为PropertyChanged


0
投票

Manfred Radlwimmer是对的。

UpdateSourceTrigger=PropertyChanged

需要更新模型。

  <DataGrid x:Name="unitTable" ItemsSource="{Binding Units}" AutoGenerateColumns="False">
<DataGrid.Columns>
     <DataGridCheckBoxColumn Binding="{Binding Path=IsChosen, Mode=TwoWay}" Header="Chosen"></DataGridCheckBoxColumn>
     <DataGridTextColumn Binding="{Binding Path=Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Header="Name"></DataGridTextColumn>
     <DataGridTextColumn IsReadOnly="True" Binding="{Binding Path=IsActive, Mode=TwoWay, Converter={StaticResource boolToActive}}" Header="Active"></DataGridTextColumn>
</DataGrid.Columns>

© www.soinside.com 2019 - 2024. All rights reserved.