我有一个 WPF DataGrid,可以添加新行 (
CanUserAddRows="True"
)。我的专栏之一是组合框。使用以下代码,我可以将数据绑定到此 ComboBox:
<DataGridTemplateColumn Header="Validator" MinWidth="150">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding DataContext.ValidatorVariables, RelativeSource={RelativeSource FindAncestor, AncestorType=Window}, UpdateSourceTrigger=PropertyChanged}"
SelectedItem="{Binding SelectedValidatorVariable, UpdateSourceTrigger=PropertyChanged}"
IsEnabled="{Binding HasValidator, UpdateSourceTrigger=PropertyChanged}">
如果我首先在占位符行中选择一个组合框项目,则不会从此占位符行创建新项目。仅当我在文本列中进入编辑模式时,占位符行才会添加到项目源中。复选框列也不起作用,只有文本列。
这会导致副作用:
结果:先前选择的 ComboBox 项目被清除
这种情况有什么解决办法吗?
任何输入控件,例如
ComboBox
,都应该放在 CellEditingTemplate 中。 CellTemplate
应包含显示当前所选值的 TextBlock
:
<DataGridTemplateColumn Header="Validator" MinWidth="150">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding SelectedValidatorVariable}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox ... />
</DataTemplate>
</DataGridTemplateColumn>