В проекте MVVM строка таблицы данных связана с объектом OA, а столбец таблицы данных связан со свойством PB = Code.Value
этого объекта.
Binding="{Binding Code.Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, NotifyOnValidationError=True, ValidatesOnDataErrors=True}"
После изменения свойства PB мы делаем OnPropertyChanged("Code");
Кажется, это работает нормально, за исключением того, что когда я отредактировал значение PB в ячейке сетки данных, а затем щелкнул другой элемент управления вне сетки данных или в другой строке сетки данных или также когда я использую клавишу ввода, тогда установщик свойства PB запускается с пустым значением ""
. Это запускается через «внешний код».
Я заметил, что когда я редактирую ячейку во второй раз, этого не происходит ...
Исходный код таблицы данных xaml:
<DataGrid Style="{StaticResource MyDataGrid}" BorderBrush="Black" Width="150"
BorderThickness="1" HorizontalScrollBarVisibility="Hidden" Grid.Row="2" Height="200"
AutoGenerateColumns="False" HorizontalAlignment="Left" ColumnHeaderHeight="24" Margin="4"
VirtualizingPanel.IsVirtualizing="true" VirtualizingPanel.VirtualizationMode="Recycling"
EnableRowVirtualization="True" EnableColumnVirtualization="True" HeadersVisibility="Column"
SelectedItem="{Binding ItemSelection, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
ItemsSource="{Binding ListItems, UpdateSourceTrigger=PropertyChanged, IsAsync=True}"
SelectionMode="Single" SelectionUnit="FullRow" GridLinesVisibility="None" SelectionChanged="Grid_SelectionChanged" >
<DataGrid.Columns>
<DataGridTextColumn CanUserSort="False" CanUserReorder="false" Header="Name" Width="*"
Binding="{Binding Code.Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, NotifyOnValidationError=True, ValidatesOnDataErrors=True}" >
<DataGridTextColumn.CellStyle>
<Style TargetType="DataGridCell" BasedOn="{StaticResource DataGridCellEdit}"/>
</DataGridTextColumn.CellStyle>
<DataGridTextColumn.ElementStyle>
<Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource dgTextBlockViewLinks}">
<Setter Property="ToolTip" Value="{Binding Code.Tooltip}"/>
<Setter Property="Background" Value="{Binding Code.Background}"/>
<Setter Property="Foreground" Value="{Binding Code.Foreground}"/>
</Style>
</DataGridTextColumn.ElementStyle>
<DataGridTextColumn.EditingElementStyle>
<Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource dgTextBoxEditLeft}">
<Setter Property="MaxLength" Value="20"/>
</Style>
</DataGridTextColumn.EditingElementStyle>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
Может быть, у кого-то есть интуиция о том, что здесь происходит.
Я бы очень хотел предотвратить использование отмененных и / или коммитов в ячейке.