У меня есть следующий код XAML:
<DataGrid ItemsSource="{Binding TempParameters}" AutoGenerateColumns="False" CanUserAddRows="False" Height="100" Name="TempParameterGrid" CanUserSortColumns="False" Width="{Binding Source={StaticResource theWidth}}" MouseDown="SetSelectedGrid">
<DataGrid.Columns>
<DataGridTextColumn Width="*" Header="ID" IsReadOnly="True" Binding="{Binding ID}"/>
<DataGridTemplateColumn Header="Parameter" IsReadOnly="False" >
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox SelectedValue="{Binding name, Mode=TwoWay}" ItemsSource ="{Binding ParameterNames, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox Text ="{Binding name, Mode=TwoWay}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Width="*" Header="Start" IsReadOnly="False" Binding="{Binding start}"/>
<DataGridTextColumn Width="*" Header="End" IsReadOnly="False" Binding="{Binding end}"/>
<DataGridTextColumn Width="*" Header="Samples" IsReadOnly="False" Binding="{Binding samples}"/>
</DataGrid.Columns>
</DataGrid>
DataGrid привязывается к свойству коллекции TempParameters
. Это набор следующих объектов:
public class TuneParameterRecord {
public int ID { get; set; }
public string name { get; set; }
public double start { get; set; }
public double end { get; set; }
public int samples { get; set; }
}
Все столбцы доступны для редактирования. Однако мне нужно, чтобы в столбце имени был список предопределенных имен. Поэтому я подумал предоставить ComboBox список допустимых значений (хотя многие укажут на это, этот список не может быть перечислением. Мне нужно, чтобы это был список строк). Этот список предоставляется в контексте данных окна.
Я могу ссылаться на него напрямую, предоставляя относительный источник в CellEditingTemplate. Моя проблема в том, что когда я пытаюсь отредактировать ячейку в соответствующем столбце, я получаю курсор, который может редактировать текстовое поле вместо получения поля со списком.
Чтобы получить поле со списком. Мне нужно несколько раз щелкнуть мышью в области, обозначенной красным на прикрепленных изображениях. Первое изображение показывает, что ячейка редактируется с помощью курсора, а второе изображение имеет поле со списком (хотя и замаскировано) после того, как я несколько раз щелкнул в указанной красной области.
Красная область, в которой я нажимаю несколько раз, чтобы появилось поле со списком