У меня есть сетка данных, привязанная к наблюдаемой коллекции. При нажатии кнопки добавляется новая строка, и я хочу начать редактирование новой строки, как только она будет добавлена. Для этого я хочу использовать AddingNewItem или InitializingNewItem события, потому что я думаю, что я могу получить доступ к вновь добавленной строке в этом событии и вызвать BeginInit для него (или что-то подобное)
Но в приведенном ниже коде я не могу заставить события работать. Когда я добавляю новый элемент, события не запускаются. Я что-то упустил?
<DataGrid Margin="5"
AddingNewItem="enumerationsDataGrid_AddingNewItem"
AutoGenerateColumns="False"
InitializingNewItem="enumerationsDataGrid_InitializingNewItem"
ItemsSource="{Binding TypesAllAvailable}"
RowDetailsVisibilityMode="Collapsed">
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Expander x:Name="rowDetailsExpander"
Cursor="Hand"
IsExpanded="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}, Mode=FindAncestor}, Mode=TwoWay, Path=DetailsVisibility, Converter={StaticResource visToBoolConverter}}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Width="0.7*"
Binding="{Binding TypeName}"
Header="Name" />
<DataGridTextColumn Width="0.2*"
Binding="{Binding Enumerations.Count}"
Header="Enums"
IsReadOnly="True" />
<DataGridTextColumn Width="0.7*"
Binding="{Binding Parent.Name}"
Header="Scope"
IsReadOnly="True" />
</DataGrid.Columns>
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<StackPanel>
<DataGrid x:Name="enumerationsDataGrid"
Margin="5 0 5 5"
AddingNewItem="enumerationsDataGrid_AddingNewItem"
AutoGenerateColumns="false"
ItemsSource="{Binding Enumerations}"
SizeChanged="enumerationsDataGrid_SizeChanged">
<DataGrid.RowStyle>
<Style BasedOn="{StaticResource MetroDataGridRow}"
TargetType="DataGridRow">
<Setter Property="Tag" Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}, Path=DataContext}" />
<Setter Property="ContextMenu">
<Setter.Value>
<ContextMenu>
<MenuItem Command="{Binding PlacementTarget.Tag.RemoveEnumerationValueCommand, RelativeSource={RelativeSource AncestorType=ContextMenu}}"
CommandParameter="{Binding}"
Header="_Delete enumeration" />
</ContextMenu>
</Setter.Value>
</Setter>
</Style>
</DataGrid.RowStyle>
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Name}"
Header="Enumerations" />
</DataGrid.Columns>
</DataGrid>
<TextBlock Margin="5 0 5 5"
HorizontalAlignment="Center"
Foreground="Black"
Text="No enumerations found."
Visibility="{Binding Items.IsEmpty, Converter={StaticResource bool2VisibilityConverter}, ElementName=enumerationsDataGrid}" />
<Button Width="110"
Margin="5 0 0 5"
HorizontalAlignment="Left"
Command="{Binding AddEnumerationValueCommand}"
CommandParameter="{Binding}"
Content="New enumeration" />
</StackPanel>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
<DataGrid.RowStyle>
<Style BasedOn="{StaticResource MetroDataGridRow}"
TargetType="DataGridRow">
<!--<Setter Property="DetailsVisibility" Value="{Binding ElementName=rowDetailsExpander}, Path=IsExpanded}" /> -->
<Setter Property="Tag" Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type UserControl}}, Path=DataContext}" />
<Setter Property="ContextMenu">
<Setter.Value>
<ContextMenu>
<MenuItem Command="{Binding Parent.RemoveStateTypeCommand}"
CommandParameter="{Binding}"
Header="_Delete state" />
<!-- Command="{Binding PlacementTarget.Tag.DeleteObjectiveStateCommand, RelativeSource={RelativeSource AncestorType=ContextMenu}}" -->
</ContextMenu>
</Setter.Value>
</Setter>
</Style>
</DataGrid.RowStyle>
</DataGrid>
События находятся в том же UserControl и точка останова не попадает ...
private void enumerationsDataGrid_AddingNewItem(object sender, AddingNewItemEventArgs e)
{
}
private void enumerationsDataGrid_InitializingNewItem(object sender, InitializingNewItemEventArgs e)
{
}
EDIT
Я использую компонент DataGrid, который должен иметь событие AddingNewItem и InitializingNewItem
https://docs.microsoft.com/en-us/dotnet/api/system.windows.controls.datagrid.addingnewitem?view=netframework-4.7.2
https://docs.microsoft.com/en-us/dotnet/api/system.windows.controls.datagrid.initializingnewitem?view=netframework-4.7.2
Когда я инициализирую сетку данных, как в примере выше, привязываем его к коллекции Observable и добавляем элемент в связанную коллекцию, ни одно из этих событий не запускается. И мне любопытно, почему эти события не проводятся?
С привязкой все в порядке, потому что элемент правильно добавлен в сетку данных.
EDIT2
Я знаю о событиях уведомления и наблюдаемых коллекциях, но при просмотре я могу получить доступ только к классу ViewModel. Но я хочу сказать, что когда пользователь добавляет новую строку, эта строка переключается в режим редактирования, и пользователь может записывать в свои ячейки. Вместо двойного щелчка по нему.
Так вот почему я пытаюсь использовать эти два события. Потому что, когда у меня есть ссылка на ячейку, я могу вызвать BeginEdit https://docs.microsoft.com/en-us/dotnet/api/system.windows.controls.datagrid.beginedit?view=netframework-4.7.2