Я действительно не нашел подходящего решения для следующей проблемы: когда я редактирую некоторые столбцы DataGrid в WPF / NetCore, я хотел бы использовать настраиваемое текстовое поле или элемент управления, чтобы я мог выполнять различные действия, например предупреждение для дубликатов отображать похожие записи или события, препятствующие заполнению дубликатов, и т. д. c ...
<DataGrid ItemsSource="{Binding lessonEntries}" AutoGenerateColumns="False" Grid.Column="0" Grid.Row="0" Margin="10" CanUserAddRows="True" CanUserDeleteRows="True" CanUserReorderColumns="False" CanUserSortColumns="True">
<DataGrid.Columns>
<DataGridTextColumn Header="{x:Static res:Strings.wndMainColNative}" Binding="{Binding Native.Text}" Width="*" />
<DataGridTextColumn Header="{x:Static res:Strings.wndMainColForeign}" Binding="{Binding Foreign.Text}" Width="*" />
<!-- TEST -->
<DataGridTemplateColumn Header="Test1" Width="*">
<DataGridTemplateColumn.CellTemplate >
<DataTemplate>
<TextBox Name="testBox" Text="{Binding Path=Foreign.Text, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" ></TextBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="{x:Static res:Strings.wndMainColLvlSpeak}" Binding="{Binding LevelSpeak.Level}" IsReadOnly="False" />
<DataGridTextColumn Header="{x:Static res:Strings.wndMainColWrite}" Binding="{Binding LevelWrite.Level}" IsReadOnly="False" />
<DataGridTextColumn Header="{x:Static res:Strings.wndMainColListen}" Binding="{Binding LevelListen.Level}" IsReadOnly="False" />
</DataGrid.Columns>
</DataGrid>
Но я не смог найти, как заменить текстовое поле.
В конечном итоге я буду передать настройки в пользовательский элемент управления, например список разрешенных слов, запрещенных слов или существующих слов, и он будет вести себя, как указано.
Наиболее близким, что я нашел, является использование DataGridTemplateColumn
, но он всегда находится в режиме редактирования, в то время как Мне это нужно только при редактировании ячейки.
РЕДАКТИРОВАТЬ:
Иногда решение просто есть, и вы его не видите! Благодаря @ Rekshino
Acutally TextBlock
- это элемент управления для использования в режиме отображения, но решение использовало DataGridTemplateColumn
:
<DataGridTemplateColumn Header="Test1" Width="*">
<DataGridTemplateColumn.CellTemplate >
<DataTemplate>
<TextBlock Name="testBox" Text="{Binding Path=Foreign.Text, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<StackPanel >
<ComboBox SelectedItem="{Binding Path=Foreign.Text}"/>
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>