Datagrid 没有双击编辑列
Datagrid no double click to edit columns
我在一个简单的 Window 中使用 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" 分配给列时,模型不再更新。
谁能告诉我我做错了什么?
DataGridColumns 通常只在编辑的单元格失去焦点时更新绑定数据。要解决此问题并使其与您的样式一起使用,请将绑定的 UpdateSourceTrigger
设置为 PropertyChanged
。
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>
我在一个简单的 Window 中使用 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" 分配给列时,模型不再更新。
谁能告诉我我做错了什么?
DataGridColumns 通常只在编辑的单元格失去焦点时更新绑定数据。要解决此问题并使其与您的样式一起使用,请将绑定的 UpdateSourceTrigger
设置为 PropertyChanged
。
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>