我正在编写一个 MVVM WPF 应用程序,其中包含需要可编辑的值数据网格。值的含义因其他数据而异,因此我编写了一个用户控件,用于使用模板编辑它们,该模板取决于值的类型。即,它可能显示为文本框、组合框或链接到数据库以检索可能值的其他几个内部控件之一。这是我用过的xaml。
<DataGridTemplateColumn Header="Value">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<local:ValueViewingControl Value="{Binding Value}" ValueType="{Binding SettingValueType}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<local:ValueEditingControl Value="{Binding Value,Mode=TwoWay}" ValueType="{Binding SettingValueType}" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
问题是一旦进入编辑模式,下一次单击 ValueEditingControl 的任何部分都会导致单元格退出编辑模式并返回到 ValueViewingControl,然后我才能真正做任何事情。我认为这与细胞认为它失去了焦点有关。有谁知道在我实际使用标签或单击单元格之前将单元格保持在编辑模式的方法?
[编辑] 多一点测试表明,如果我使用文本框或标准组合框作为编辑控件,它会按预期工作。这让我觉得它是我编写的自定义控件的实现,其中包含弹出窗口。当我选择作为编辑控件一部分的弹出窗口时,它认为我已经离开了数据网格单元,因此结束了编辑模式。我如何说服 datagridcell 弹出窗口在其中以达到焦点目的?它必须是可能的,否则组合框将不起作用。