Как обновить элемент управления 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 все обрабатывается автоматически, но не тогда, когда я использую триггер.