gpt4 book ai didi

wpf - 如何在WPF DataGrid中实现可编辑的DataGridComboBoxColumn

转载 作者:行者123 更新时间:2023-12-02 18:36:29 24 4
gpt4 key购买 nike

我想让用户能够编辑 WPF DataGrid 中的某些数据(来自 .net Framework 4.0)。 “仪器”列应允许用户从静态列表中选择可用仪器或编写自由文本。我的 DataGrid 使用 MVVM 绑定(bind)到数据。我尝试了在互联网上找到的许多解决方案,但没有一个能够正常工作。这是我的代码:

<DataGrid Margin="0,6" ItemsSource="{Binding Path=Orders}" AutoGenerateColumns="False"  CanUserAddRows="False" CanUserDeleteRows="False" CanUserResizeRows="True">
<DataGrid.Columns>
<DataGridComboBoxColumn Header="Instrument" MinWidth="140"
ItemsSource="{x:Static ViewModel.Instruments}" SelectedItemBinding="{Binding Path=SelectedInstrument}">
<DataGridComboBoxColumn.EditingElementStyle>
<Style TargetType="ComboBox">
<Setter Property="IsEditable" Value="True"/>
</Style>
</DataGridComboBoxColumn.EditingElementStyle>
</DataGridComboBoxColumn>
</DataGrid.Columns>
</DataGrid>

下拉列表显示正确。该字段可以使用任何文本进行编辑,但在关闭自由文本的下拉列表后,它会将 SelectedInstrument 设置为空。它仅适用于所选项目。我尝试更改为 SelectedValueBinding,但没有帮助。

如何正确落实这一要求?有人可以在这里发布工作示例吗?

附加:订单是 ObservableCollectionOrder 具有属性,如字符串 Title、DateTime Ordered、字符串 SelectedInstrument、Instruments 是一个字符串[]

解决方案:以下建议作为解决方法 bathineni作品:

<DataGrid Margin="0,6" ItemsSource="{Binding Path=Orders}" AutoGenerateColumns="False" CanUserAddRows="False" CanUserDeleteRows="False" CanUserResizeRows="True">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Instrument" MinWidth="140">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=SelectedInstrument, Mode=OneWay}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox IsEditable="True" Text="{Binding Path=SelectedInstrument}"
ItemsSource="{x:Static ViewModel.Instruments}"/>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>

最佳答案

发生这种情况是因为输入的自由文本是字符串类型,而您绑定(bind)到组合框的所选项目是某种复杂类型......

不要使用DataGridComboBoxColumn,而是使用DataGridTemplateColumn,并且您可以将组合框的Text属性绑定(bind)到某个属性,该属性将在之后保存自由文本值关闭下拉列表。

通过查看以下示例,您可以得到更好的想法。

<DataGrid>
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox IsEditable="True"
Text="{Binding NewItem}"
ItemsSource="{Binding Sourcelist.Files}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>

关于wpf - 如何在WPF DataGrid中实现可编辑的DataGridComboBoxColumn,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6899697/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com