Wpf MVVM и редактирование DatagridCell - PullRequest
0 голосов
/ 28 июня 2018

В проекте 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>

Может быть, у кого-то есть интуиция о том, что здесь происходит.
Я бы очень хотел предотвратить использование отмененных и / или коммитов в ячейке.

...