joni7373 Ответов: 0

Как обновить элемент управления DataGrid в WPF при использовании eventtrigger и invokecommandaction, чтобы вызвать roweditending / celleditending ? или есть ли способ, чтобы автоматически обновить элемент управления DataGrid ?


Я хочу использовать MVVM и InvokeCommandAction для запуска некоторых событий DataGrid-edit и поэтому вызывать фоновые команды, которые должны просто выполнить некоторые вычисления с измененным значением в DataGrid. Поэтому я хочу, чтобы представление обновлялось нормально, как это было бы без EventTriggers. Однако, похоже, что представление не обновляется автоматически при использовании этих триггеров. Поэтому я хотел бы знать, есть ли способ автоматически обновить представление или, по крайней мере, некоторые хорошие идеи, как реализовать обновление вручную?

Ниже приведены некоторые фрагменты моего кода XAML:

<DataGrid Name="dgObstructionsBottom"  CanUserAddRows="True" ItemsSource="{Binding ObstructionBottom}" Height="419" AutoGenerateColumns="False"    CurrentCell="{Binding ObstructionBottomSelectedItem, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
                                    
                                    <DataGrid.Columns>
                                        <DataGridTextColumn Binding="{Binding start, UpdateSourceTrigger=PropertyChanged}" Header="x1" Width="*"  EditingElementStyle="{StaticResource MaterialDesignDataGridTextColumnEditingStyle}" />
                                        
                                        <DataGridTextColumn  Binding="{Binding end, UpdateSourceTrigger=PropertyChanged}"   Header="x2" Width="*" EditingElementStyle="{StaticResource MaterialDesignDataGridTextColumnEditingStyle}"/>
                                    </DataGrid.Columns>
                                    <i:Interaction.Triggers>
                                        <i:EventTrigger EventName="BeginningEdit">
                                            <i:InvokeCommandAction Command="{Binding BeginningEditCommand}" CommandParameter="Bot" />
                                        </i:EventTrigger>
                                        <i:EventTrigger EventName="CellEditEnding">
                                            <i:InvokeCommandAction Command="{Binding ObstructionBottomChangeCommand}" />
                                        </i:EventTrigger>
                                        <i:EventTrigger EventName="AddingNewItem">
                                            <i:InvokeCommandAction Command="{Binding AddingNewItemCommand}"/>
                                        </i:EventTrigger>
                                    </i:Interaction.Triggers>
                                    <DataGrid.InputBindings>
                                        <KeyBinding Key="Delete" Command="{Binding ObstructionBottomRemoveCommand}"/>
                                    </DataGrid.InputBindings>
                                </DataGrid>


Что я уже пробовал:

Таким образом, мне каким-то образом удалось сделать это вручную, но поэтому я должен сохранить старую версию Datagrids ItemsSource и проверить, где я должен вставить изменения.

Gerry Schmitz

Вы не обновляете "сетку", вы обновляете источник данных; и если вы используете "наблюдаемую коллекцию", все это обрабатывается за вас.

joni7373

На самом деле я использую наблюдаемую коллекцию в качестве ItemsSource, и без Eventtrigger все обрабатывается автоматически, но не тогда, когда я использую триггер.

0 Ответов