Я пытаюсь Пользователю изменить дату в DataGrid внутри DataGrid. Оба являются ObservableCollections.
Вид:
<DataGrid VerticalContentAlignment="Center" CanUserAddRows="false" Grid.Row="0" Grid.Column="0" ItemsSource="{Binding ItemsCol, NotifyOnSourceUpdated=True, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" IsSynchronizedWithCurrentItem="True" EnableRowVirtualization="True" AutoGenerateColumns="False" Background="{DynamicResource PrimaryHueMidBrush}" SelectedItem="{Binding Items}" RenderTransformOrigin="0.5,0.5" Style="{DynamicResource MaterialDesignDataGrid}" IsReadOnly="true">
<DataGrid.Columns>
...
<DataGrid.RowDetailsTemplate>
<DataTemplate>
...
<DataGrid ScrollViewer.CanContentScroll="False" ItemsSource="{Binding PlanList, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" CanUserAddRows="False" VerticalContentAlignment="Bottom" AutoGenerateColumns="false" SelectedItem="{Binding RelativeSource={RelativeSource AncestorType={x:Type UserControl},Mode=FindAncestor}, Path=DataContext.SelectedPlan}" Background="{DynamicResource PrimaryHueDarkBrush}" Style="{DynamicResource MaterialDesignDataGrid}" IsReadOnly="false">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Bearbeitungstag">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding executeDay, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged, Mode=OneWay,StringFormat={}{0:dd/MM/yyyy}}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<DatePicker SelectedDate="{Binding RelativeSource={RelativeSource AncestorType={x:Type UserControl},Mode=FindAncestor},Path=DataContext.newexecuteDay, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay,StringFormat={}{0:dd/MM/yyyy}}"/>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate >
<Button Command="{Binding RelativeSource={RelativeSource AncestorType={x:Type UserControl},Mode=FindAncestor},Path=DataContext.updateOrderCommand}" VerticalAlignment="Center" Style="{DynamicResource MaterialDesignFlatButton}">
<Viewbox Stretch="Fill">
<Canvas Width="24" Height="24">
<Path Data="M15,9H5V5H15M12,19A3,3 0 0,1 9,16A3,3 0 0,1 12,13A3,3 0 0,1 15,16A3,3 0 0,1 12,19M17,3H5C3.89,3 3,3.9 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V7L17,3Z" Fill="{DynamicResource SecondaryAccentBrush}" />
</Canvas>
</Viewbox>
</Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
...
</DataGrid.Columns>
</DataGrid>
ViewModel
Команда updateOrderCommand переопределяет выполненный день с новым исполнением и сохраняет его в базе данных. В конце начинается:
CollectionViewSource.GetDefaultView(ItemsCol).Refresh();
И в этот момент код вылетает
System.Windows.Markup.XamlParseException: "" DeferRefresh "....
не допускается во время транзакции AddNew или EditItem (в переводе на русский язык исключение не найдено: - /)
я уже пробовал
CollectionViewSource.GetDefaultView(ItemsCol).DeferRefresh();
Тогда обновление не разрешено.
И я попробовал некоторые CodeBehind CommitEdit () и CancelEdit () для первой DataGrid.
Я думаю, что мне нужно прервать режим редактирования внутри пользовательского интерфейса, но как в среде MVVM или RowDetailsTemplate?